高阶函数作为 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();