我们可以Object.prototype.toString.call(foo)
用来检测对象类(foo的类型),它运行良好.
但为什么Object.toString.call({})
扔TypeError: Function.prototype.toString is not generic
?
不Object.toString
继承Object.prototype
吗?
Object.toString不从Object.prototype继承
不是.内置的Object构造函数是一个Function(就像所有本机构造函数一样),因此它在自己的prototype属性之前继承自Function.prototype(即它的私有[[Prototype]]
属性引用Function.prototype).
它的原型链是:
Object[[Prototype]] -> Function.prototype -> Object.prototype -> null
Run Code Online (Sandbox Code Playgroud)
所以Function.prototype.toString掩盖了Object.prototype.toString.
一些琐事:请注意,虽然Function.prototype是一个函数,但它不是从自身继承而是从Object.prototype继承.