Как частично применить функции-члены в JavaScript?

В настоящее время у меня есть функция частичного приложения, которая выглядит так:

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);
}

Проблема в том, что она работает только для функций, не являющихся членами, например:


function foo(x, y)
{
    alert(x + y);
}

var bar = foo.curry(1);
bar(2); // alerts "3"

Как перефразировать функцию карри для применения к функциям-членам, например:

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;
6
задан starblue 7 September 2011 в 18:53
поделиться