前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重新认识原型和原型链三

重新认识原型和原型链三

作者头像
wade
发布2020-04-24 10:19:48
3800
发布2020-04-24 10:19:48
举报
文章被收录于专栏:coding个人笔记

知道了显式原型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。

(完)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 coding个人笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档