高阶函数作为 Javascript 中对象的 属性
Higher Order functions as a property of an object in Javascript
为什么我在这里得到 makeAdder is not a function 错误?我怎样才能使我的 Widget 对象的 属性 成为从高阶函数返回的函数?
var Widget = {
init: function() {
var total = this.add2(3);
console.log(total); // expect 5
},
add2: this.makeAdder(2),
makeAdder: function(left) {
return function(right) {
return left + right;
};
}
};
Widget.init();
它找不到函数,因为它还没有被定义。
在 add2: this.makeAdder(2)
中,您正在调用函数 'makeAdder',而不是在 Widget
仍在定义时定义它。
尝试将 add2
移到流程的后面,例如:
var Widget = {
init: function() {
this.add2 = this.makeAdder(2);
var total = this.add2(3);
console.log(total); // expect 5
},
makeAdder: function(left) {
return function(right) {
return left + right;
};
}
};
@freedomm-m 就我的呈现方式回答了我的问题。我的同事建议柯里化,以完成我正在寻找的东西。如果有人想做类似的事情,我会把它包括在内。
var Widget = {
init: function() {
var total = this.add2(3);
console.log(total);
},
add2: function(val) {
return this.add(2)(val);
},
add: function(left) {
return function (right) {
return left + right;
}
}
};
Widget.init();
为什么我在这里得到 makeAdder is not a function 错误?我怎样才能使我的 Widget 对象的 属性 成为从高阶函数返回的函数?
var Widget = {
init: function() {
var total = this.add2(3);
console.log(total); // expect 5
},
add2: this.makeAdder(2),
makeAdder: function(left) {
return function(right) {
return left + right;
};
}
};
Widget.init();
它找不到函数,因为它还没有被定义。
在 add2: this.makeAdder(2)
中,您正在调用函数 'makeAdder',而不是在 Widget
仍在定义时定义它。
尝试将 add2
移到流程的后面,例如:
var Widget = {
init: function() {
this.add2 = this.makeAdder(2);
var total = this.add2(3);
console.log(total); // expect 5
},
makeAdder: function(left) {
return function(right) {
return left + right;
};
}
};
@freedomm-m 就我的呈现方式回答了我的问题。我的同事建议柯里化,以完成我正在寻找的东西。如果有人想做类似的事情,我会把它包括在内。
var Widget = {
init: function() {
var total = this.add2(3);
console.log(total);
},
add2: function(val) {
return this.add(2)(val);
},
add: function(left) {
return function (right) {
return left + right;
}
}
};
Widget.init();