重新认识原型和原型链三

知道了显式原型prototype和隐式原型__proto__,我们就能很好的知道原型链是什么东西了。

说原型链之前再理几个概念:

实例隐式原型__proto__指向创建实例的构造函数的显示原型prototype。

实例可以通过__proto__调用在__proto__下的所有属性和方法。

所以,原型链就这样出来了:

function User() {
    
}User.prototype.userEat = 'userEat';
function Person() {}
Person.prototype = new User();
Person.prototype.personEat = 'personEat';
function People(){}
People.prototype = new Person();
People.prototype.peopleEat = 'peopleEat';
var people = new People();
console.log(people.userEat);
console.log(people.personEat);
console.log(people.peopleEat);
console.log(people.__proto__);

这边用到了构造继承,但是隐式原型确实是可以层层访问。

再看看这个:

function User() {}
console.log(User.__proto__ === Function.prototype);
console.log(Function.prototype.__proto__ === Object.prototype);
console.log(User.__proto__.__proto__ === Object.prototype);

输出的都是true,因为User是函数对象,所以User的隐式原型__proto__指向Function的显示原型prototype,而函数也继承于对象,所以Function的隐式原型__proto__指向Object的显示原型prototype。

所以原型链就是这么简单,实例对象通过隐式原型__proto__可以获取构造函数的所有属性和方法,又因为这些构造函数的继承性,实例对象会一层一层向上查找,这些层级链接起来就是原型链。最终原型链的尽头是null。

console.log(people.__proto__.__proto__.__proto__.__proto__.__proto__);
console.log(Object.prototype.__proto__);

得到的结果是null。

欢迎关注Coding个人笔记公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值