Object.toString和Object.prototype.toString之间有所不同

时间:2014-10-13 06:10:45

标签: javascript

我们可以使用Object.prototype.toString.call(foo)来检测对象类(foo的类型),并且效果很好。

但为什么Object.toString.call({})会抛出TypeError: Function.prototype.toString is not generic

没有Object.toString是否继承自Object.prototype

1 个答案:

答案 0 :(得分:8)

  

没有Object.toString继承自Object.prototype

没有。内置的Object构造函数是一个Function(与所有本机构造函数一样),因此它继承自 Function.prototype (即其私有[[Prototype]]属性引用 Function。原型)在它自己的原型属性之前。

其原型链是:

Object[[Prototype]] -> Function.prototype -> Object.prototype -> null

所以 Function.prototype.toString 掩盖 Object.prototype.toString

一些琐事:请注意,虽然 Function.prototype 是一个函数,但它不会从 Object.prototype 继承自身。