如果JavaScript中的`Object`原型为null,为什么我可以做Object.toString()?

时间:2014-04-23 02:36:08

标签: javascript prototype prototypal-inheritance

所有新创建的对象(使用Object.create(null)创建的对象除外)在其原型链中包含对象Object.prototype。这些新创建的对象可以调用newObject.toString(),因为toString上定义了Object.prototype

然而,Object的内部原型据说是null。如果是这样的话,为什么我能做到这一点:

Object.toString();
// prints: "function Object() { [native code] }"

也许我已经回答了我自己的问题。在toString构造函数中是否也定义了Object

为什么?!

2 个答案:

答案 0 :(得分:2)

> var obj = Object.create(null);
  undefined
> obj.toString();
  TypeError: undefined is not a function
> Object.toString();
  "function Object() { [native code] }"

请参阅obj创建时使用null作为原型,因此当您在其上调用.toString()时,将会发生错误。

但是Object self是一个函数,其原型是一个Function对象,它具有.toString()方法。

答案 1 :(得分:0)

对象的原型中不必存在可在对象上调用的函数。

举个简单的例子......

x = {}
x.y = function () { }

y不在x的原型中,但我可以使用x.y()