JS原型链
2017-09-02 本文已影响10人
DeeJay_Y
回顾一下类,实例,prototype,__proto__的关系
function People (name,age) {
this.name = name;
this.age = age;
}
People.prototype = {
sayName: function () {
console.log(this.name);
},
}
var p1 = new People('deejay',21);
p1.sayName();
类,实例,prototype,__proto__
另外有:
p1.__proto__.constructor === People; // true
People.prototype.constructor === People; //true
p1.constructor === People; //true
对于p1.construcror来说,在p1中找不到相应的属性,就回到__proto__中寻找,其实找到的是People.prototype中的constructor,和第2行等价
任何一个对象,只要是一个对象,那么总有一个函数创建了它,这个对象的__proto__属性等于创建它的函数的prototype
比如说People.prototype也是一个对象,也有__proto__属性,其中的constructor指向了Object(),即是Object()创建的对象,其prototype属性等于People.prototype.__proto__.
详细的原型链
原型链在上图中有几个需要注意的特殊点:
- Object.prototype.__proto__为null,其实就是不存在
- Function.prototype也是一个对象,即也是Object()创建的
- 对于Function自身来说,也是一个对象,也有__proto__属性,Function.__proto__.constructor === Function,即Function创建了所有的函数,包括他自己。
- 对于Object.__proto__.constructor === Function,还是那句话,Function创建了所有的函数,包括他自己。