我有一个简单的对象计算函数。我将对象结果数据传递给另一个对象函数,如链式反应
例如:
str.replace().replace().replace()
他们会将第一次替换的结果数据传递给第二次替换,就像连锁反应一样。
所以我想创建下面的代码。但不能在我的情况下工作。
请参阅以下代码段
var m=function(data){
return {
str :data,
plus:function(b){
this.str = this.str+b;
return this.str;
},
min:function(a){
this.str = this.str-a
return this.str;
}
}
}
console.log(m(5).plus(1).min(3))
如果5
添加1
为6
。然后将6
传递给min()
函数以进行reduce 3
。最后是console.log结果3
。但它有一些。请帮助解决我的问题。
谢谢
答案 0 :(得分:2)
我建议使用一个对象并在方法调用后返回该对象。为了更好地使用,您可以实现toString
和valueOf
方法直接使用返回值。
您需要的是返回整个对象,对于所有可链接的方法。
var m = function(value){
var obj = {
value: value,
plus: function (b) {
obj.value += b;
return obj;
},
min: function(a) {
obj.value -= a;
return obj;
},
toString: function () { return obj.value; },
valueOf: function () { return obj.value; }
}
return obj;
}
console.log(m(5).plus(1).min(3).value);
alert(m(5).plus(1).min(3));
console.log(m(3).plus(7) - m(5).min(1));

答案 1 :(得分:1)
var m=function(data){
return {
str :data,
plus:function(b){
this.str = this.str+b;
return this;
},
min:function(a){
this.str = this.str-a
return this;
}
}
}
console.log(m(5).plus(1).min(3).str)
对于创建类似方法调用的链接,您需要从函数中返回“this”,之后您希望链继续