javascript原型链接-获取父级的父级

duc*_*cin 5 javascript prototype

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

现在,我想检查和比较不同对象的原型。如果Array的原型是基于 的Object.prototype,我想类似的事情Array.prototype.prototype应该是可能的。但它是未定义的:

> Array.prototype.prototype
undefined
Run Code Online (Sandbox Code Playgroud)

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

> Array.__proto__
[Function: Empty]
> Object.__proto__
[Function: Empty]
> Array.__proto__.__proto__
{}
Run Code Online (Sandbox Code Playgroud)

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

  • 如何访问原型的“父原型”?
  • prototype和 和有什么不一样__proto__

bfa*_*tto 5

我相信您正在寻找:

\n\n
Object.getPrototypeOf(Array.prototype);\n// The same as Object.prototype\n
Run Code Online (Sandbox Code Playgroud)\n\n

(这是ES5的功能,不兼容一些旧的浏览器)。

\n\n
\n

原型和 __proto__ 有什么区别

\n
\n\n

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

\n\n

例如:

\n\n
function MyClass(){}\nvar myObj = new MyClass();\nmyObj.__proto__ === MyClass.prototype; // true\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
var arr = [];\narr.__proto__ === Array.prototype; // true\n
Run Code Online (Sandbox Code Playgroud)\n