这是这个问题的后续行动(虽然这是自成一体的)trying to `call` three methods but not working correctly with jQuery map。
我正在尝试在数组中存储一组方法,但是有一个可能具有如下参数的集合(初始方法在before_methods中,并且建议的方法在lm_methods中)。我确信这是我想要的非常自我解释,但我希望能够将参数合并到f的合理调用中(特别是arc.pLikedByTerm)。我目前有以下内容:
// signature
pLikedByTerm:function(term, ne, sw, m){
....
}
// code before_methods just to show
this.before_methods=[arc.pLocations,arc.pLikedLocations,arc.pLikedItems];
this.lm_methods=[arc.pLocations,arc.pLikedLocations,arc.pLikedItems, arc.pLikedByTerm('surfing'),arc.pLikedByTerm('sailing')];
$.each(this.lm_methods, function(i,f){
f(ne,sw,m);
});
我该怎么做或这是一个糟糕的设计?什么是惯用的方式?我的大脑被炒了。
事先提前更新1
玩下面的答案,看起来这可能是最简单的事情:
var fns=[logStuff("this is msg"), logMoreArgs("a term","a you msg")];
for (var i=0; i<fns.length; i++) {
fns[i];
}
答案 0 :(得分:1)
具有一系列功能是经常使用的常见做法。例如,考虑一下这个Callback类。
function Callback(){
this.callbacks = [];
}
Callback.prototype.run = function(cb) {
for (var i=0; i<this.callbacks.length; i++) {
this.callbacks[i]();
}
};
然后我们可以添加一些回调。
function logStuff(msg) {
jsprint(msg || "No message");
}
obj = new Callback();
obj.callbacks.push(logStuff);
obj.callbacks.push(logStuff);
obj.run();
如果我们run this我们发现它只记录我们的默认值。因此,如果我们想绑定一些数据,我们可以使用bind函数。
Function.prototype.bind
<强> thisArg 强>
要作为this参数传递给目标的值 调用绑定函数时的函数。如果,则忽略该值 绑定函数使用new运算符构造。arg1,arg2,...
支持前缀为绑定函数的参数的参数 在调用目标函数时。
我们的新代码将第一个参数设置为不同的字符串,然后我们会看到。您可以绑定任意数量的参数。
obj = new Callback();
obj.callbacks.push(logStuff.bind(null, "My message"));
obj.callbacks.push(logStuff.bind(null, "My other message"));
obj.run();
答案 1 :(得分:0)
你正在做的事情会好起来的。只需删除参数和parens:
而不是:
this.lm_methods = [arc.pLocations,arc.pLikedLocations,arc.pLikedItems, arc.pLikedByTerm( '冲浪'),arc.pLikedByTerm( '帆船')];
执行:
this.lm_methods = [arc.pLocations,arc.pLikedLocations,arc.pLikedItems, arc.pLikedByTerm,arc.pLikedByTerm];
示例:
function say(txt) {
console.log("say" + txt);
}
function shout(txt) {
console.log("shout" + txt);
}
function whisper(txt) {
console.log("whisper" + txt);
}
var funcArr = [say, shout, whisper];
$.each(funcArr, function(i, f) {
f("hello");
});
会打印:
的SayHello shouthello whisperhello