javascript原型链接 - 得到父母的父母

时间:2013-06-26 20:05:44

标签: javascript prototype

我一直在阅读javascript原型链接,据我所知,有一个全局Object.prototype是其他原型的基础,例如Array.prototype,它可以作为另一个原型的基础原型。就像基于类的OOP中的继承一样。没关系。

现在,我想检查并比较不同对象的原型。如果Array的原型基于Object.prototype,我想像Array.prototype.prototype这样的东西应该是可行的。但它未定义:

> Array.prototype.prototype
undefined

当我输入__proto__而不是prototype时,我得到:

> Array.__proto__
[Function: Empty]
> Object.__proto__
[Function: Empty]
> Array.__proto__.__proto__
{}

(控制台输出取自nodejs)。我有以下问题:

  • 如何访问原型的“父原型”?
  • prototype__proto__之间有什么区别?

1 个答案:

答案 0 :(得分:4)

我相信你在寻找:

Object.getPrototypeOf(Array.prototype);
// The same as Object.prototype

(这是ES5功能,not compatible with some older browsers)。

  

原型和__proto __

之间的区别是什么

prototype属性始终属于构造函数(如ObjectArray和自定义构造函数)。 __proto__属性存在于使用此类构造函数创建的实例上,并指向与constructor.prototype相同的对象。

例如:

function MyClass(){}
var myObj = new MyClass();
myObj.__proto__ === MyClass.prototype; // true

在您给出的示例中,Array.__proto__实际上是构造函数的原型对象 - 而不是其prototype属性。这就是为什么它是[Function: Empty],因为Array是一个函数,是默认Function构造函数的一个实例。某个特定数组实例的__proto__Array.prototype相同:

var arr = [];
arr.__proto__ === Array.prototype; // true