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

时间:2015-01-02 01:00:14

标签: 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());

我想要实现的是

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

alert(total);

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:1)

我认为返回.Result()非常好,因为你不能让可链接的方法返回一种类型,然后最终自动神奇地变成其他东西。

即使其他建议的答案都是使用方法将您的计算器转换为结果,它们只是由运行时隐式调用(例如警报函数中的toString)。

如果你想要真正的数字链接你应该扩展数字原型而不是使用计算器(但我知道,猴子修补是邪恶的)。