【JS】理解原型 constructor 原型链

本文深入探讨了JavaScript中构造函数、原型(prototype)及其属性__proto__的概念,并解析了它们之间的关系,帮助读者理解对象继承的基本原理。

[什么是原型]

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

[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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值