javascript передает объектный метод другому объектному методу - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть объект типа bar, который имеет массив из многих foo s.

Я хочу иметь возможность динамически вызывать метод foo - я мог бы сделать это с помощью eval, передавая строку, но я бы лучше понял, как передать функцию.

Я - концептуально - делаю это правильно?

var foo = function() {
    this.methodA = function() {
        return "a";
    };
    this.methodB = function() {
        return "b";
    };
};

var bar = function() {
    var foos = [];

    this.construct = function() {
        foos[0] = new foo();
    }; this.construct();

    this.callFoo = function(f) {
        return foos[0].f();
    };
};

b = new bar();
b.callFoo(foo.methodA); //<-- This doesn't work
b.callFoo(methodA); //<-- Or this

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

твои протекающие глобалы везде.

// global leak
foo = function() {

    // global leak
    methodA = function() {
        return "a";
    };
    // global leak
    methodB = function() {
        return "b";
    };
};
// global leak
bar = function() {
    var foos = [];
    // global leak
    construct = function() {
        foos[0] = new foo();
    };construct();

    this.callFoo = function(f) {
        return foos[0].f();
    };
};

b = new bar();
b.callFoo(foo.methodA); //<-- This doesn't work
b.callFoo(methodA); //<-- Or this

Чтобы ответить на актуальный вопрос, попробуйте это.

var foo = function() {
    return {
        methodA: function() { return "a"; },
        methodB: function() { return "b"; }
    };
}

var bar = function() {
    var foos = [];

    return {
        construct: function() {
            foos.push(foo());
        },
        callFoo = function(name) {
            return foos[0][name]();
        }
    }
}

b =  bar();
b.callFoo("methodA");
0 голосов
/ 21 апреля 2011

попробуйте это:

bar = function() {
    var foos = [];

    construct = function() {
        foos[0] = new foo();
    };construct();

    this.callFoo = function(f) {
        return foos[0][f].apply(foos[0]);
    };
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...