首页 > Web开发 > 详细

深入理解js——隐式原型

时间:2016-12-02 14:07:23      阅读:206      评论:0      收藏:0      [点我收藏+]

每个函数都有一个prototye(原型),而每个对象都有一个_proto_,可成为隐式原型。

_proto_是一个隐藏的属性,javascript不希望开发者用到这个属性值,有的低版本浏览器甚至不支持这个属性值。所以你在Visual Studio 2012这样很高级很智能的编辑器中,都不会有__proto__的智能提示,但是你不用管它,直接写出来就是了。

var obj={},去控制台输出obj._proto_,会发现obj.__proto__和Object.prototype的属性一样。因为obj这个对象本质上是被Object函数创建的,因此obj.__proto__=== Object.prototype。我们可以用一个图来表示。

技术分享

即每个对象都有一个__proto__属性,指向创建该对象的函数的prototype。

问题来了“Object prototype”也是一个对象,它的__proto__指向哪里?Object.prototype是个特例,它的__proto__指向的是null。Function.prototype指向的对象,它的__proto__也指向Object.prototype。

根据每个对象的__proto__指向的是创建它的函数的prototype,就会出现:Object.__proto__ === Function.prototype。用一个图来表示。

技术分享

从图中可以看出,自定义函数Foo.__proto__指向Function.prototype,Object.__proto__指向Function.prototype,可是怎么还有一个Function.__proto__指向Function.prototype?

因为Function也是一个函数,函数是一种对象,也有__proto__属性。既然是函数,那么它一定是被Function创建。所以Function是被自身创建的。所以它的__proto__指向了自身的Prototype。

 

深入理解js——隐式原型

原文:http://www.cnblogs.com/xj198197/p/6125143.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!