我有这堂课:
var color = function(r, g, b, a) {
this.r = r
this.g = g;
this.b = b;
this.a = a;
this.toString = function() {
if (!isset(a)) return "rgb("+parseInt(r)+","+parseInt(g)+","+parseInt(b)+")";
return "rgba("+parseInt(r)+","+parseInt(g)+","+parseInt(b)+","+a+")";
}
}
如果我想要字符串输出,我必须输入(例如)console.log(colorInstance.toString())
但每次接收函数需要字符串值时,是否有办法隐式调用toString()方法?所以我可以改为编写console.log(colorInstance)吗?
答案 0 :(得分:3)
每个对象都有一个toString()方法,当要将对象表示为文本值或者以期望字符串的方式引用对象时,会自动调用该方法。
来自here。这适用于"" + color
之类的情况,但除此之外,toString()
被隐式调用的情况并不多。
答案 1 :(得分:0)
无法在javascript中定义运算符,最多可以创建一些奇怪的函数。但是javascript也有自动类型转换,所以如果运行时期望一个字符串,javascript实际上总是会调用toString方法。虽然有明确的转换,例如parseInt(value):)
答案 2 :(得分:0)
toString
,就不会调用 console.log
。它(或valueOf
)仅在需要强制原语的上下文中调用。
如果您真的遇到这个问题,可以编写自己的console.log
版本:
var logValue(...args) {
console.log(...args.apply(a => a.toString()));
}
或等效的非ES6版本。