4

我一直在阅读有关 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__
4

1 回答 1

4

我相信您正在寻找:

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

(这是一个 ES5 特性,与一些旧浏览器不兼容)。

原型和 __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
于 2013-06-26T20:12:06.160 回答