如果我有一些看起来像这样的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文件中,而不必随意使用它。
所以 - 如果你知道答案,请帮助兄弟!
谢谢, 克
答案 0 :(得分:3)
使用apply
或call
执行函数调用。有关这些功能的说明,请点击此处:
答案 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);
此外,您将对象文字符号与函数文字混合在一起,这是不正确的。