Javascript部分应用

标签 javascript prototype

我试图用柯里化(Currying)来增强函数原型(prototype),但我得到了意想不到的结果。它在某些情况下工作正常,但并非全部。

这是我使用原型(prototype)增强的代码:

Function.prototype.method = function(name, func) {
  if(!this.prototype[name]){ 
    this.prototype[name] = func;
  }
  return this;
};

Function.method("curry-left", function(){
  var slice = Array.prototype.slice; 
  var that = this;
  var args = slice.call(arguments,0);
  return function(){
    that.apply(null, args.concat(slice.call(arguments,0)));
  }
});

我使用以下代码对其进行测试:

function print(arg1, arg2){
  console.log(arg1 + ", " + arg2);
}

print["curry-left"]("hej")("då"); // prints hej, då

var op = {"+":function(a,b){return a + b;}}

console.log(op["+"]["curry-left"](1)(2)) // prints undefined

我尝试过调试它,似乎原型(prototype)中的 that 变量把一切搞乱了,但我不确定为什么。如果我执行 console.log(that) 我会得到 [Function] 结果,这似乎是正确的

如果我能让它在两个实例上工作,那就太好了。

提前致谢

最佳答案

问题是你的内部函数不返回结果:

Function.method("curry-left", function(){
  var slice = Array.prototype.slice; 
  var that = this;
  var args = slice.call(arguments,0);
  return function(){
    that.apply(null, args.concat(slice.call(arguments,0)));
    ^
  }
});

修复:

return that.apply(null, args.concat(slice.call(arguments,0)));

关于Javascript部分应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24465569/

相关文章:

javascript - 在 javascript 中拦截的原型(prototype)

对象中对象的 Javascript 原型(prototype)继承

JavaScript/原型(prototype)

javascript - 如何使用类语法复制 Javascript 构造函数和原型(prototype)对象

javascript - 为什么添加到一个 IFRAME 的 String.prototype 的属性在使用 IFRAME 的 String 函数创建的字符串对象中不可用?

javascript - 在 AppModule 中导入模块以实现 Angular2 中的关注点分离

javascript - 我有 2 个 UI 选项卡。我需要通过单击该选项卡外的按钮来激活一个特定选项卡

javascript - 如何延迟加载图像并使它们可用于打印

javascript - td 内的 div 正在重置 td 的宽度

javascript - 我在 Node JS 中检索 Git 标签信息的方法很慢,如何加快速度?