「Learning」JavaScript深入之从原型到原型链
学习内容:JavaScript深入之从原型到原型链
Learning Card
- 构造函数创建对象
prototype
属性__proto__
属性constructor
属性
- 实例与原型
- 属性逐级向上找
- 原型的原型
- 所有实例原型的
__proto__
最终都指向Object.prototype
- 所有实例原型的
- 原型链
- 父类的
prototype
===实例的__proto__
Object.prototype.__proto__ === null
- 父类的
原型链三大定律
1 | function Person() {} |
构造函数创建对象
prototype
每个函数都有
prototype
属性函数的
prototype
属性指向调用这个构造函数创建是实例的原型每个JS对象(除了
null
)在创建时都会关联两一个对象,这个对象就是原型每个对象都会从原型继承属性
__proto__
__proto__
属性指向对象的原型- 父元素的
prototype
指向子元素的__proto__
constructor
- 每个原型都有一个
constructor
属性 constructor
属性指向关联的构造函数
实例与原型
- 读取属性时,从实例开始查找,没有就向上找到原型,再向上找到原型的原型,以此类推,一直找到最顶层为止
原型的原型
- 原型对象都是通过
Object
创建的 - 所有实例原型的
__proto__
最终都指向Object.prototype
原型链
Object.prototype.__proto__ === null
- 查找属性最终都查到
Object.prototype
就停止查找了
注意点
constructor
属性
Son.constructor === Father
因为实例本身没有constructor
属性,当读不到时,会向Father.prototype
查找,所以实际上是
1 | person.constructor === Person.prototype.constructor; //true |
__proto__
属性
__proto__
属性是一个非标准的访问原型的方法,当使用obj.__proto__
时,可以理解成返回了Object.getPrototypeOf(obj)