什么是__proto__?
上节也提到了,任何一个对象中都会有constructor和__proto__属性,那么这个__proto__到底是什么呢?
还是上一个例子
Person.prototype.lastName = "Liu";
function Person(){
this.name = "Wu";
}
var person1 = new Person();
我们已经知道prototype是构造函数的一个属性,与实例化的对象并没有关系,我们可以通过Person.prototype访问原型,但是,怎么通过实例化的对象访问原型呢,这就需要用到__proto__属性了。
实例化对象的__proto__属性指向的就是原型。
即: person1.proto = Person.prototype
__proto__属性是系统内部定义的属性,一般情况下最好不要人为修改它的值。
实例化的过程到底发生了什么?
Person.prototype.lastName = "Liu";
function Person(){
this.name = "Wu";
}
var person1 = new Person();
上面这个对象实例化的过程可以理解为是三个子过程
第一个过程是
var this = {
__proto__: Person.prototype
} ; 首先创建了一个this对象,对象中包含一个__proto__属性,这个属性指向自己的原型。
第二个过程就是执行语句this.name = "Wu"的过程
this = {
__proto__: Person.prototype,
name = "Wu"
}
第三个过程是返回这个this对象
总结: 任何一个对象都有__proto__属性,这个属性指向自己的原型。