在线阅读后,我写了这个简单的代码,通过链接进行加法和乘法。但是,阅读代码,对我来说,“结果”方法使代码的可读性降低,而且看起来有点多余。有人可以帮我摆脱结果函数吗?
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);
答案 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)。
如果你想要真正的数字链接你应该扩展数字原型而不是使用计算器(但我知道,猴子修补是邪恶的)。