"J" + { toString: function() { return "S"; } }; // "JS"
为什么输出“JS?”
当我这样做时:
"J" + { someFoo: function() { return "S"; } }; // "J[object Object]"
为什么这也不是“JS”?
我正在试图弄清.toString()
如何在第一个区块中使用。
由于
答案 0 :(得分:4)
toString
是一个特殊函数(在对象的原型中),当需要对象的字符串化模式时调用它。
在您的情况下,加法运算符调用对象的toString
方法。 From the specs:
- 醇>
如果Type(lprim)是String或Type(rprim)是String,那么
一个。返回串联ToString(lprim)后跟ToString(rprim)的结果的字符串。
但是,可以覆盖此本机方法,您已在第一个代码段中完成了*。加法运算符只调用自定义方法,产生你得到的结果。
在后一个代码段toString
中只返回对象的默认值。
您可以在很多情况下看到这种情况,例如alert({})
从对象的原型调用内部toString
方法,因为alert
需要一个字符串作为参数。
(*更准确:您没有重写本机属性,而是使用相同的名称为对象创建了自己的属性,而不是从原型链中搜索本机属性。< / p>