这是在javascript中实现链接的正确方法吗?

dev*_*747 1 javascript method-chaining

在线阅读后,我写了这个简单的代码,通过链接进行加法和乘法.但是,阅读代码,对我来说,"结果"方法使代码的可读性降低,而且看起来有点多余.有人可以帮我摆脱结果功能吗?

var Calculator = function () {
    var result = 0;
    this.Add = function (x) {

        result = result + x;

        return this;
    };

     this.Multiply = function (x) {

        result = result * x;

        return this;
    };

    this.Result = function () {
        return result;
    }

};


var total = new Calculator().Add(2).Add(3).Multiply(5);

alert(total.Result());
Run Code Online (Sandbox Code Playgroud)

我想要实现的是

var total = new Calculator().Add(2).Add(3).Multiply(5);

alert(total);
Run Code Online (Sandbox Code Playgroud)

JCO*_*611 6

你可以用原型设计做一些有趣的事情:

var Calculator = function(){ /*...*/ }

// Works with alert
Calculator.prototype.toString = function(){
   return this.Result();
}

// Works with operators
Calculator.prototype.valueOf = function(){
   return this.Result();
}

var total = new Calculator().Add(2).Add(3).Multiply(5);
alert(total); // 25
total + 1; // 26
Run Code Online (Sandbox Code Playgroud)

请注意,该函数alert(...)在使用之前将参数转换为字符串.toString().这也适用于具有字符串的任何其他操作,例如串联(例如,total + "")使用数字操作.valueOf().