Object.prototype的构造函数

时间:2017-08-10 00:17:18

标签: javascript oop prototypal-inheritance

在JavaScript中,每个对象都从特定原型继承其属性和方法,其中原型是对象。

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

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

我的意思是完成此表达式以便评估为true。

Object.prototype instanceof .....

1 个答案:

答案 0 :(得分:0)

来自Kyle Simpsion的"this and Object Prototypes" book of "You don't know JS"系列

function Foo() {
    // ...
}

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

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

默认情况下为Foo.prototype对象(在第1行的声明时间)   片段!)获取一个公共的,不可枚举的(参见第3章)属性   名为.constructor,此属性是对该引用的引用   函数(在这种情况下为Foo)与对象关联。   此外,我们看到由"构造函数"创建的对象a。呼叫new Foo()似乎也有一个名为.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