我有自定义功能,我们称之为func
。
function func(someArg) {
return Math.random() + someArg;
}
我有一组Thing
个对象,这些对象都有某种功能exec
var Thing = function() {
this.exec = function(n) {
console.log(n);
}
}
var arr = [new Thing(), new Thing(), new Thing()];
现在,我希望能够为数组中的所有元素执行一个函数,并且应该为每个函数执行评估该函数的参数。一个例子:
function execAll(arg) {
arr.forEach(function(e) { e.exec(arg); });
}
execAll(func(10));
这会返回相同值的3倍,因为对func()
的调用评估execAll
一次,然后在每个e.exec(arg)
中使用func
。我怎样才能实现e.exec
的每次调用都会评估execAll(someFunc()); // invoked with a function
execAll(20); // invoked with a plain value
?
更新
如果有一个支持同时使用的解决方案,那将是非常好的:
var Thing = function() {
this.exec = function(n) {
console.log(n);
}
}
var arr = [new Thing(), new Thing(), new Thing()];
var func = function(someArg) {
return Math.random() + someArg;
}
function execAll(arg) {
arr.forEach(function(e) { e.exec(arg); });
}
execAll(func(10));
整个片段:
{{1}}
答案 0 :(得分:1)
替换它:
function execAll(arg) {
arr.forEach(function(e) { e.exec(arg); });
}
execAll(function (){func(10)});
用这个:
function execAll(arg) {
arr.forEach(function(e) { e.exec(typeof arg==='function'?arg():arg); });
}
execAll( 10);
您应该发送一个函数,以便将来为每次迭代调用。
你实际做的是立即调用它。
答案 1 :(得分:0)
我会使函数func成为Thing的私有函数。这提供了封装..
var Thing = function() {
var func = function(someArg) {
return Math.random() + someArg;
};
this.exec = function(n) {
console.log(func(n));
};
}
var arr = [new Thing(), new Thing(), new Thing()];
function execAll(arg) {
arr.forEach(function(e) { e.exec(arg); });
}
execAll(10);