有没有办法在javascript中定义隐式转换运算符?

时间:2015-10-25 08:18:57

标签: javascript

我有这堂课:

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)吗?

3 个答案:

答案 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版本。