javascript将对象方法传递给不同的对象方法

发布于 2024-11-03 04:40:50 字数 664 浏览 0 评论 0原文

我有一个 bar 类型的对象,它有一个由许多 foo 组成的数组。

我希望能够动态调用 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

I have an object of type bar which has an Array of many foos.

I want to be able to call a method of foo dynamically - I could do this with eval by passing a string, but I would rather get a handle on how to pass the function.

Am I - conceptually - doing this the right way?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

花海 2024-11-10 04:40:50

你到处泄漏的全局变量。

// 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");

your leaking globals everywhere.

// 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

To answer the actual question try 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");
江城子 2024-11-10 04:40:50

试试这个:

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

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

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

try this:

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

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

    this.callFoo = function(f) {
        return foos[0][f].apply(foos[0]);
    };
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文