使用Object.create和toString.call()返回'[object Rectangle]'

时间:2013-02-26 22:39:13

标签: javascript node.js v8

在节点中:如果我这样做

var Shape = {
  x:0,
  y:0
}

var rectangle = Object.create(Shape);

我可以得到:

toString.call(rectangle);
//'[object Object]'
toString.call(Shape);
//'[object Object]'
toString.call({});
//'[object Object]'

有没有办法实现类似:

toString.call(rectangle);
'[object Shape]'

我知道我可以覆盖Shape.toString()或创建一个新的Shape.toClassString()方法,但我对toString.call()实现感兴趣。这是v8必需的问题吗?

1 个答案:

答案 0 :(得分:3)

您可以查看规范:http://es5.github.com/#x15.2.4.2

基本上,默认实现采用内部[[Class]]属性并将其连接到结果字符串。由于Shaperectangle都是普通对象,因此其内部[[Class]]属性为Object。您必须覆盖toString或使用构造函数创建对象。

我不认为V8或Node.js会给你任何额外的可能性来覆盖它,但我不确定。