【JS】五分钟理解原型 constructor 原型链

[什么是原型]

原型是函数对象的一个属性,它定义了构造函数制造出的对象的公共祖先,通过该构造函数产生的对象,可以继承该原型的属性和方法,同时原型也是一个对象。

[constructor]

补充我在构造函数内没有的讲的,我们知道person1 和 person2 都是Person构造函数构造出来的实例,同时我们提出来了一个新的概念constructor 是构造的意思,在学完es6之后我发现这个constructor在某种意义上和类很相似,这里不做详细解释。

 
 
 
 
function Person(name, age) {
 this.name = name;
 this.age = age;
}
var person1 = new Person('hehe',18);
var person2 = new Person('haha',18);

person1和person2的constructor都指向了Person。

[prototype]

Person.prototype.sex='male';
console.log(person1.sex);

//male

这个Person.prototype就是原型,它在出生时就被定义好了,我们说了它指向原型对象,我们在上面给它添加了一个sex属性值为male,这个对象可以理解为是person1和person2的共有的祖先,当自身没有这个属性时,它就会沿着原型链往上寻找。

继续探究Person.prototype,我们发现内部也含有一个隐式属性是constructor巧了它指向的和那两个实例一样,也是Person,我的理解是Person.prototype也是Person的一个实例.也是所有实例的祖先。

[__proto__]

上面我提到了原型链,这也是person1上可以访问sex属性的原因。那么什么是原型链呢?

JS 在创建对象的时候,都会生成一个叫做__proto__的隐式属性,它指向创建它的构造函数的原型对象。
我们输出person1.__proto__会发现就是Person.prototype,通过proto属性把原型和这个对象联系起来,当这个对象上没有这个属性时就会访问proto索引看看上面有没有,如果还没有就继续沿着proto向上寻找。

[总结]

1.构造函数Person有属性prototype指向原型(Person.prototype)

2.构造函数的实例person1,person2有属性__proto__也指向Person.prototype

3.person1,person2以及Person.prototype都有construtor属性指向构造函数Person



猜你喜欢

转载自blog.csdn.net/timcope/article/details/80205715
今日推荐