分析JavaScript之走近原型链

从代码结合图片来看,我们不难发现实例dog上并没有constructor这个属性,而原型对象才拥有这个属性,那么实例是如何获取到这个属性呢🤔 ,这就涉及到了JavaScript中一种特殊的行为——委托,下面我们就来了解一下什么是委托。

委托

当我们尝试去获取对象的某个属性值,但该对象并没有这个属性时,那么JavaScript 会试着从原型对象中获取属性值。如果那个原型对象也没有该属性,那么再从它的原型中寻找,依次类推直到该过程最后到达终点Object.prototype,如果仍然没有找到就返回undefined。这个过程被称为委托。

现在你就明白了,实例dog正是通过委托这种方式找到了创建自己的构造函数。在明白这一点之后,原型链也就呼之欲出了。

原型链

如果在第一个对象上没有找到需要的属性或者方法引用,引擎就会继续在它的[[Prototype]]指向的对象上进行查找。同理如果后者中也没有找到需要的引用就会继续查找它的[[Prototype]],依次类推直到到达Object.prototype,这一系列对象的链接被称为原型链。

我们可以用一张图来表示下

由于构造函数也是对象,所以它同样具有构造函数和原型。构造函数的prototype是实例的原型,并非自身的原型。自定义的构造函数同样需要借助[[Prototype]]找到原型,进而找到创建自己的构造函数——即原生构造函数Function,但请注意原生的构造函数Function的[[Prototype]]是指向了Function.prototype。


  1. console.log(Function.__proto__ === Function.prototype); // true 

所有的原型对象都可以沿着原型链一直寻找至到找到最后的原型对象Object.prototype,然后Object.prototype再往上寻找就是Null,用来表示此处没有对象。

小结

充分了解原型链是理解JavaScipt这门语言重要环节之一,而且对理解JavaScript继承的实现也会有莫大的帮助。如果你已经对原型链梳理的差不多了,下一篇文章我将带你走近JavaScript继承的世界。

最后

有关JavaScript的原型链的分享就到这里了,如果阅读完本篇文章后,你对JavaScript的原型链有了更深一步地理解和认识的话,欢迎给笔者点赞鼓励😄!你们的支持是我继续分享有关JavaScrit知识的动力,谢谢阅读完本篇文章的亲们

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章