Javascript部分应用程序
我试图用currying预言函数原型,但我得到了意想不到的结果。它在某些情况下可以正常工作,但并非所有情况下都可以 以下是我使用预兆原型的代码:Javascript部分应用程序,javascript,prototype,Javascript,Prototype,我试图用currying预言函数原型,但我得到了意想不到的结果。它在某些情况下可以正常工作,但并非所有情况下都可以 以下是我使用预兆原型的代码: Function.prototype.method = function(name, func) { if(!this.prototype[name]){ this.prototype[name] = func; } return this; }; Function.method("curry-left", function()
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
我试过调试它,它似乎是原型中的变量,把一切都搞糟了,但我不知道为什么。如果我做了console.log(那)
我得到的结果是[函数]
,这似乎是正确的
如果我能让它在两种情况下都工作,那就太好了
提前感谢问题是您的内部函数没有返回结果:
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)));
那
应该是一个局部变量,所以var那=这个代码>。谢谢,已修复,但无法解决问题issue@user25470别担心,西斯会发生:)