2

一个小 JavaScript 拼图给你善良的向导:

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]'

4

1 回答 1

2

该字符串的第二部分是ECMAScript 规范中定义的内部[[class]] 。

您当然可以在对象上定义自己toString()的,但这不会受到调用Object.prototype.toString()它和设置自定义上下文的影响。

你可以覆盖Object.prototype.toString(),但这很讨厌,你不应该这样做。

基本上,如果不编译您自己的 ECMAScript 并进行自定义[[class]],您就无法做到这一点。

您不应该依赖该字符串来确定有关您创建的自定义对象的信息。您可以使用instanceof运算符或constructor属性。

于 2013-06-19T05:39:31.267 回答