I currently 开发者_如何学JAVAhave a partial-application function which looks like this:
Function.prototype.curry = function()
{
    var args = [];
    for(var i = 0; i < arguments.length; ++i)
        args.push(arguments[i]);
    return function()
    {
        for(var i = 0; i < arguments.length; ++i)
            args.push(arguments[i]);
        this.apply(window, args);
    }.bind(this);
}
The problem is that it only works for non-member functions, for instance:
function foo(x, y)
{
    alert(x + y);
}
var bar = foo.curry(1);
bar(2); // alerts "3"
How can I rephrase the curry function to be applied to member functions, as in:
function Foo()
{
    this.z = 0;
    this.out = function(x, y)
    {
        alert(x + y + this.z);
    }
}
var bar = new Foo;
bar.z = 3;
var foobar = bar.out.curry(1);
foobar(2); // should alert 6;
Instead of your curry function just use the bind like:
function Foo()
{
    this.z = 0;
    this.out = function(x, y)
    {
        alert(x + y + this.z);
    }
}
var bar = new Foo;
bar.z = 3;
//var foobar = bar.out.curry(1);
var foobar = bar.out.bind(bar, 1);
foobar(2); // should alert 6;
You're close. this.z inside of this.out references the this scoped to the function itself, not the Foo() function. If you want it to reference that, you need to store a variable to capture it.
var Foo = function() {
    this.z = 0;
    var self = this;
    this.out = function(x, y) { 
        alert(x + y + self.z);
    };
};
http://jsfiddle.net/hB8AK/
 
         
                                         
                                         
                                         
                                        ![Interactive visualization of a graph in python [closed]](https://www.devze.com/res/2023/04-10/09/92d32fe8c0d22fb96bd6f6e8b7d1f457.gif) 
                                         
                                         
                                         
                                         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论