参数作为函数参数(带参数)-- JavaScript

3
如果我有一些看起来像这样的面向对象JavaScript代码:
function someFunction(a, b, c) {
  // do something with a, b, and c
}

function theLoader() {
    loadFunction: someFunction,
    load: function() {
      // invoke the loadFunction with the proper parameter set
    }
}

var myLoader = new theLoader();
myLoader.load();

假设“theLoader”是预期的抽象和通用的,我可以调用它并将“loadFunction”设置为几乎任何东西,因此我不知道在任何给定时间参数将是什么。 “load”方法必须调用“loadFunction”并以某种方式能够将参数集传递给它....
我该如何实现我想要做的事情?如果这是一个不好的方法,我们完全可以重构代码。我希望保持“loadFunction”的限制,这样我就不必以特殊的方式编写加载器函数。
最终,我想将theLoader打包到自己的.js文件中,并且不必对其进行修改。
所以 - 如果您知道答案,请帮助一下兄弟!
谢谢, g
3个回答

3

我一直在研究apply方法,但如果loadFunction不是真正的函数名称,我是否可以只使用loadFunction.apply(this, arguments)? - Garret Schweitzer
是的,因为apply和call都是Function对象的方法。 - Jonny Buchanan

1

你应该让你的loadFunction遵循一个接口,并使用多态性来调用它。话虽如此,你确实有一个真正的要求,需要以某种方式捕获someFunction的参数。

你能否允许load函数接受loadFunction所需的参数?

myLoader.load(1, '2', 'foo'); // calls this.loadFunction(1, '2', 'foo')

或者,在构造函数中允许theLoader接收它们?

function theLoader() {
    this.loadFunctionArgs = arguments;
}

theLoader.prototype = {
    loadFunction: someFunction,
    load: function() {
        return this.loadFunction.apply(this, this.loadFunctionArgs)
    }
}

var myLoader = new theLoader(1, '2', 'foo');
myLoader.load(); // calls someFunction(1, '2', 'foo')

我完全不知道这是否是您的应用程序的良好设计。就语言而言,JavaScript 可以做到这一点,当然也可以。


那是很好的建议。我试图保持它有点抽象,以简化起见,但实际上它看起来更像这样(下一个评论)。 - Garret Schweitzer
客户数据加载器函数(customerDataLoader) {内容} 客户发票加载器函数(customerInvoiceLoader) {内容}custLoader = new theLoader({loadFunction: customerDataLoader}); invoiceLoader = new theLoader({loadFunction: invoiceDataLoader});参数值不是静态的。 - Garret Schweitzer

0
我认为你要找的是这个:
function theLoader() {
    this.load = function() {
        if (this.loadFunction) {
            return this.loadFunction.apply(this, arguments);
        }
    };
}
// Usage
var loader = new Loader();
loader.loadFunction = someFunction;
loader.load(1, 2, 3, 4);

另外,你混合使用了对象字面量和函数字面量,这是不正确的。

Helgi - 感谢你的建议。我对点符号和对象字面量符号有些模糊。你的示例和指针给了我很大的帮助。 - Garret Schweitzer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接