一个小小的益智拼图:
var toString = Object.prototype.toString;
var e = new Error();
console.log(toString.call(e)); // '[object Error]'
function Poodle(){}
var fido = new Poodle();
console.log(toString.call(fido)); // '[object Object]'
如何让最后一行返回'[object Poodle]'
?
答案 0 :(得分:2)
该字符串的第二部分是ECMAScript规范中的内部[[class]] defined。
您当然可以在对象上定义自己的toString()
,但不会因为调用Object.prototype.toString()
并设置自定义上下文而受到影响。
你可以覆盖Object.prototype.toString()
,但这是非常讨厌的,你不应该这样做。
基本上,如果不编译自己的ECMAScript并制作自定义[[class]]
,则无法执行此操作。
您不应该依赖该字符串来确定有关您已创建的自定义对象的信息。您可以使用instanceof
运算符或constructor
属性。