专栏首页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。

(完)

本文分享自微信公众号 - coding个人笔记(gh_2ce38b49dae1),作者:wade

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 重新认识原型和原型链二

    知道了prototype这个原型(也叫原型属性、原型对象,不要搞混了,原型、原型属性、原型对象都是同一个东西),我们还需要知道__proto__和constru...

    wade
  • 实现一个promise之完成对x的处理并测试

    完成之后,promise官方推荐了一个测试方法,只有通过测试才算符合标准的promise:

    wade
  • node中的path模块

    path模块,其实还是在webpack中用过一下下,至于node,还没开始用。这个模块算是基础,当作是预习一下。

    wade
  • 关于javascript的原型和原型链,看我就够了(三)

    原型对象有一个constructor属性,指向该原型对象对应的构造函数 foo 为什么有 constructor 属性?那是因为 foo 是 Foo 的实例。 ...

    陌上寒
  • JavaScript原型和原型链( prototype 与 __proto__ )

    var a = new A; //a 类型:对象 //A 类型:函数 var Object = new Function(); //var 对象 = new...

    Leophen
  • [前端][原型链]一道题串联原型链易混淆点的整理

    看到别人问这个问题,自己输入了一下发现输出的是a,感觉和想象中的不一样于是分析了一下,顺便回顾一下关于原型链的知识点。

    Tuzei
  • 初识Python3

    Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。

    用户2146693
  • 【JS】479- 又见原型和原型链

    在前端这块领域,原型与原型链是每一个前端er必须掌握的概念。我们多次在面试或者一些技术博客里面看见这个概念。由此可见,这个玩意对于前端来说有多重要。其实它本身理...

    pingan8787
  • 重新认识原型和原型链二

    知道了prototype这个原型(也叫原型属性、原型对象,不要搞混了,原型、原型属性、原型对象都是同一个东西),我们还需要知道__proto__和constru...

    wade
  • js原形链

    windseek

扫码关注云+社区

领取腾讯云代金券