We can use Object.prototype.toString.call(foo)
to detect object class (the type of foo), and it works well.
But why does Object.toString.call({})
throw TypeError: Function.prototype.toString is not generic
?
Doesn't Object.toString
inherit from Object.prototype
?
Doesn't Object.toString inherit from Object.prototype
No. The built–in Object constructor is a Function (like all native constructors), so it inherits from Function.prototype (i.e. its private [[Prototype]]
property references Function.prototype) before its own prototype property.
Its prototype chain is:
Object[[Prototype]] -> Function.prototype -> Object.prototype -> null
so Function.prototype.toString masks Object.prototype.toString.
A bit of trivia: note that while Function.prototype is a function, it doesn't inherit from itself but from Object.prototype.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With