这是在 javascript 中实现链接的正确方法吗?
Is this the right way to implement chaining in javascript?
在网上阅读后,我编写了这个简单的代码,通过链接进行加法和乘法。但是阅读代码,在我看来,方法 "Result" 使代码的可读性降低,并且看起来有点多余。谁能帮我去掉 Result 函数?
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);
您可以通过原型设计做一些有趣的事情:
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()
。
我认为 returning .Result()
非常好,因为您不能将可链接方法 return 设置为一种类型,然后最后自动神奇地变成其他类型。
甚至其他建议的答案都使用方法将您的计算器转换为结果,它们只是由运行时隐式调用(例如警报函数中的 toString)。
如果你想要真正的数字链接,你应该扩展 Number 原型而不是使用计算器(但我知道,Monkey-patching 是邪恶的)。
在网上阅读后,我编写了这个简单的代码,通过链接进行加法和乘法。但是阅读代码,在我看来,方法 "Result" 使代码的可读性降低,并且看起来有点多余。谁能帮我去掉 Result 函数?
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);
您可以通过原型设计做一些有趣的事情:
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()
。
我认为 returning .Result()
非常好,因为您不能将可链接方法 return 设置为一种类型,然后最后自动神奇地变成其他类型。
甚至其他建议的答案都使用方法将您的计算器转换为结果,它们只是由运行时隐式调用(例如警报函数中的 toString)。
如果你想要真正的数字链接,你应该扩展 Number 原型而不是使用计算器(但我知道,Monkey-patching 是邪恶的)。