这是在javascript中实现链接的正确方法吗?
Is this the right way to implement chaining in javascript?
在线阅读后,我编写了这个简单的代码,通过链接进行加法和乘法。但是阅读代码,在我看来,方法"结果"使代码的可读性降低,并且似乎是多余的。有人可以帮助我摆脱结果函数吗?
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()
。
我认为返回.Result()
是完全可以的,因为你不能让可链接的方法返回一种类型,然后最终自动神奇地变成其他类型。
甚至其他建议的答案也是使用将计算器转换为结果的方法,它们只是由运行时隐式调用(例如警报函数中的 toString)。
如果你想要真正的数字链,你应该扩展数字原型,而不是使用计算器(但我知道,猴子补丁是邪恶的)。
相关文章:
- 简单的JavaScript方法链接
- D3使用方法链接时的不同行为
- Javascript方法链接定义
- 使用javascript的方法链接不起作用
- 如何在JS中完成方法链接
- 缺点和替代方案 - JS方法链接
- jQuery/JS方法链接
- 是否可以在JavaScript中的变量名后面的新行上开始方法链接
- CoffeeScript调用返回对象的方法(链接)
- 方法链接返回未定义
- 如何在维护命名空间的同时创建类似jQuery的方法链接
- jQuery如何进行方法链接
- 如何有效地调试方法链接函数参数
- JavaScript 方法链接和 this 对象
- NODEJS中的Javascript方法链接
- 带有子方法的方法链接
- 在方法链接中使用函数调用者名称
- 在CouchDB中使用Map-Reduce方法链接文档
- 对象或方法链接如何在jQuery中工作
- 多元素选择器上的jQuery方法链接