前端 js 经典:原型对象和原型链

简介: 前端 js 经典:原型对象和原型链

1. 原型对象和构造函数纠缠不清的一生

// prototype 函数类型的数据,都有一个叫做 prototype 的属性。
// 这个属性指向的是一个对象,就是所谓的原型对象。
function fn() {}
fn.prototype; // { constructor: f } 这个就是原型对象
 
// constructor 属性指向它的构造函数
fn == fn.prototype.constructor; // true

2. 原型对象的作用

最主要的作用就是用来存放实例对象的公有属性和方法,不然每次创建实例,相同的属性和方法都会重复创建,浪费内存。

function Person(name, age) {
  this.name = name;
  this.age = age;
}
 
Person.prototype.type = "people";
Person.prototype.say = function () {
  console.log("呀食勒没啊");
};
 
// 实例对象在自己这找不到对应的属性和方法,就会去构造函数的原型对象找。
// 如果有,就返回。如果没有,就会沿着__proto__继续往父级找,直到为null为止
let yqcoder = new Person("yqcoder", 18);
yqcoder.type; // people
yqcoder.say(); // 呀食勒没啊
yqcoder.constructor; // 查看对象的构造函数 Person() {}

3. 原型链

// prototype 显示原型,这是函数类型数据的属性,指向原型对象
// __proto__ 隐式原型,这是对象类型数据的属性,指向原型对象
Person.prototype == yqcoder.__proto__; // true
 
// 实例对象如果顺着__proto__属性一直往父级的原型对象找,都没找到就返回undefined。
// yqcoder.__proto__.__proto__.__proto__ 这种结构就叫原型链,也叫隐式原型链。
// 它的终点就是Object.prototype指向的原型对象,下一个__proto__就为null了
yqcoder.love; // undefined

4. 万物皆对象

// 函数也是对象,那么函数也有__proto__指向原型对象。
// 原型对象里的constructor指向构造函数Function
Person.__proto__ == Function.prototype; // true

5. 总结

术的尽头,气体源流

原型的尽头,Object.prototype


目录
相关文章
|
1天前
|
存储 缓存 JavaScript
JavaScript内存泄漏通常发生在对象不再需要时
【6月更文挑战第16天】JavaScript内存泄漏常由闭包引起,当不再需要的对象仍被闭包引用时,垃圾回收机制无法清理。例如,创建返回大型对象引用的闭包函数会导致内存泄漏。避免泄漏需及时解除引用,清除事件监听器,利用WeakMap或WeakSet,以及定期清理缓存。使用性能分析工具监控内存使用也有助于检测和解决问题。
15 8
|
3天前
|
XML 前端开发 JavaScript
前端简介(HTML+CSS+JS)
前端简介(HTML+CSS+JS)
|
3天前
|
JavaScript 前端开发
javascript判断对象中是否存在某个字段
javascript判断对象中是否存在某个字段
|
3天前
|
JavaScript 前端开发
JS遍历数组和对象的方法有哪些
JS遍历数组和对象的方法有哪些
|
3天前
|
JavaScript
js中批量修改对象属性
js中批量修改对象属性
|
3天前
|
JavaScript 前端开发
JavaScript BOM 浏览器对象模型
JavaScript BOM 浏览器对象模型
|
3天前
|
JavaScript 前端开发 网络协议
前端JS发起的请求能暂停吗?
在讨论前端JS发起的请求是否能暂停时,需要明确两个概念:什么状态可以被认为是“暂停”?以及什么是JS发起的请求?
59 1
前端JS发起的请求能暂停吗?
|
4天前
|
JavaScript 前端开发 Unix
Node.js 全局对象
Node.js 全局对象
14 2
|
5天前
|
JavaScript 前端开发
深入解析JavaScript中的面向对象编程,包括对象的基本概念、创建对象的方法、继承机制以及面向对象编程的优势
【6月更文挑战第12天】本文探讨JavaScript中的面向对象编程,解释了对象的基本概念,如属性和方法,以及基于原型的结构。介绍了创建对象的四种方法:字面量、构造函数、Object.create()和ES6的class关键字。还阐述了继承机制,包括原型链和ES6的class继承,并强调了面向对象编程的代码复用和模块化优势。
12 0
|
6天前
|
存储 JSON JavaScript
JavaScript基础-对象与JSON
【6月更文挑战第11天】本文介绍了JavaScript对象的创建(字面量、构造函数、Class)与操作,包括属性访问和描述符。同时讲解了JSON的性质及其与JS对象的关系,以及序列化和解析过程。文章还列举了三个常见易错点(属性访问错误、JSON格式错误、循环引用)并提供了避免策略。通过代码示例展示如何操作对象和处理JSON,强调实践对于掌握这些概念的重要性。

热门文章

最新文章