我们可以使用Object.prototype.toString.call(foo)
来检测对象类(foo的类型),并且效果很好。
但为什么Object.toString.call({})
会抛出TypeError: Function.prototype.toString is not generic
?
没有Object.toString
是否继承自Object.prototype
?
答案 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 继承自身。