0

在节点中:如果我这样做

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 必需的问题吗?

4

1 回答 1

3

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

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

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

于 2013-02-26T22:42:37.843 回答