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

时间:2009-04-10 14:32:16

标签: javascript

如果我有一些看起来像这样的OO 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文件中,而不必随意使用它。

所以 - 如果你知道答案,请帮助兄弟!

谢谢, 克

3 个答案:

答案 0 :(得分:3)

使用applycall执行函数调用。有关这些功能的说明,请点击此处:

答案 1 :(得分: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中做这当然是可以的(就我所说的语言而言)。

答案 2 :(得分: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);

此外,您将对象文字符号与函数文字混合在一起,这是不正确的。