toString() 在 javascript 中如何工作?
How does toString() work in javascript?
"J" + { toString: function() { return "S"; } }; // "JS"
为什么输出是"JS?"
当我这样做时:
"J" + { someFoo: function() { return "S"; } }; // "J[object Object]"
为什么这不是 "JS"?
我想弄清楚 .toString()
是如何在第一个块中使用的。
谢谢
toString
是一个特殊的函数(在对象的原型中),当需要对象的字符串化模式时调用它。
在您的例子中,加法运算符调用对象的 toString
方法。 From the specs:
If Type(lprim) is String or Type(rprim) is String, then
a. Return the String that is the result of concatenating ToString(lprim) followed by ToString(rprim).
但是,您可以覆盖此本机方法,您已在第一个代码段中完成*。加法运算符只是调用自定义方法,它会产生您得到的结果。
在后面的代码片段中 toString
只是 returns 对象的默认值。
你可以在很多情况下看到这种情况,例如 alert({})
从对象的原型调用内部 toString
方法,因为 alert
需要一个字符串作为参数。
(* 更准确:您没有重写本机 属性,而是为具有相同名称的对象创建了一个自己的 属性,它被用来代替从原型链中搜索原生 属性。
"J" + { toString: function() { return "S"; } }; // "JS"
为什么输出是"JS?"
当我这样做时:
"J" + { someFoo: function() { return "S"; } }; // "J[object Object]"
为什么这不是 "JS"?
我想弄清楚 .toString()
是如何在第一个块中使用的。
谢谢
toString
是一个特殊的函数(在对象的原型中),当需要对象的字符串化模式时调用它。
在您的例子中,加法运算符调用对象的 toString
方法。 From the specs:
If Type(lprim) is String or Type(rprim) is String, then
a. Return the String that is the result of concatenating ToString(lprim) followed by ToString(rprim).
但是,您可以覆盖此本机方法,您已在第一个代码段中完成*。加法运算符只是调用自定义方法,它会产生您得到的结果。
在后面的代码片段中 toString
只是 returns 对象的默认值。
你可以在很多情况下看到这种情况,例如 alert({})
从对象的原型调用内部 toString
方法,因为 alert
需要一个字符串作为参数。
(* 更准确:您没有重写本机 属性,而是为具有相同名称的对象创建了一个自己的 属性,它被用来代替从原型链中搜索原生 属性。