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

use*_*561 8 javascript

我们可以Object.prototype.toString.call(foo)用来检测对象类(foo的类型),它运行良好.

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

Object.toString继承Object.prototype吗?

Rob*_*obG 9

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继承.