我试图用currying来扩展Function原型但是我得到了意想不到的结果。在某些情况下它可以正常工作,但不是全部。
这是使用augument原型的代码:
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
我已经尝试过调试它,它似乎是原型中的that
变量弄乱了一切,但我不知道为什么。如果我console.log(that)
我得到了[Function]
,这似乎是正确的
如果我可以让它在两个实例上工作,那将是很好的。
提前致谢
答案 0 :(得分:1)
问题是你的内部函数没有返回结果:
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)));