javascript的原型探究

JavaScript是一门基于原型的语言,每一个对象都是通过原型链连接继承于它的原型对象。那么所有对象的最终原型对象是什么。接下来我们做一下探究。

我们知道每个函数在创建时都有一个prototype属性,这个属性是一个指针,它指向一个对象,该对象是通过调用构造函数而创建的那个对象实例的原型对象。当调用构造函数创建新实例后,该实例内部将包含一个指针,指向构造函数的原型对象。在ECMA-262中该指针叫[[prototype]]。在FF、Safari和Chrome中可通过__proto__属性连接。这个连接存在于实例和构造函数的原型对象之间,不存在实例与构造函数之间。

1.通过对象字面量创建的对象,它们的原型都存在obj.__proto__ =Object.prototype。

2.因为var obj = new Object,所以Object也是一个构造函数,所以Object.__proto__ =Function.prototype。

3.Object是Function.prototype的实例,且Function.prototype.__proto__ =Object.prototype。

以上3点会让你对JavaScript的原型对象更加头痛,因为你发现找来找去最终的原型是一个圆环,但其实有个思维误区,即总以为现有Object后有Object.prototype,其实把Object.prototype单哪出来一切就变得非常简单。

1.Object.prototype创建了Function.prototype;

2.Function.prototype创建了Function、Object对象。

3.Object创建所有实体对象。

总结一句话就是Object.prototype是一切对象的最终原型。

posted @ 2015-02-10 12:27  擎夜  阅读(91)  评论(0)    收藏  举报