2017-08-10 29 views
0

在JavaScript中,每个对象都从特定原型继承其属性和方法,其中原型是对象。Object.prototype的构造函数

继承形成一个原型链,其中(Object.prototype)位于其顶部(后面跟着没有属性或方法的null),并且所有对象都从中继承(除非有人将其他更改插入到原型链中) 。

If(Object.prototype)是一个对象,它的构造函数是什么?

我的意思是什么完成这个表达式才能被评估为真。

Object.prototype instanceof ..... 
+2

[它的海龟一路下滑(https://en.wikipedia.org/wiki/Turtles_all_the_way_down) – Barmar

+0

目前并不需要一个构造函数,它是一个内置的Object就是。你可能会问什么是* null *的构造函数。 – RobG

+0

null虽然使用了typeof运算符,但它使用的是'object' –

回答

0

"this and Object Prototypes" book of "You don't know JS"系列凯尔Simpsion

function Foo() { 
    // ... 
} 

Foo.prototype.constructor === Foo; // true 

var a = new Foo(); 
a.constructor === Foo; // true 

Foo.prototype对象在默认情况下(在声明时就 片断1行!)获取一个公共的,不可枚举(见第二章3)属性 调用.constructor,并且此属性是对象返回到与对象关联的 函数(在这种情况下为Foo)的参考。此外,我们看到由“构造函数”调用new Foo()创建的对象a似乎也有一个名为.constructor的属性,其中 类似地指向“创建它的函数”。

注意:这不是真的。 a没有.constructor属性, ,尽管a.constructor确实解析为Foo函数,但 “构造函数”实际上并不意味着“由...构造”,因为它出现 。我们很快会解释这种奇怪的。

...

“在JavaScript对象有一个内部属性,在 说明书中的[[Prototype]],这简直是到另一个 对象的引用。表示为”。

所以,Object.prototype本身不是一个对象。关于你提到的有关的instanceof具体问题:

var a = new Function(); 
a.prototype instanceof Object; //true 
var b = new String(); 
b.prototype instanceof Object; //false 
+0

好吧,我现在不谈论构造函数属性。我问什么是用于创建实例(Object.prototype)的函数构造函数。 –

+0

在你展示的例子中,创建实例a的构造函数是Foo。同样,创建Object.prototype的构造函数是什么? –

+0

已编辑。看看这是否澄清事情。 – Aydin4ik

相关问题