0

这是这个问题的后续(虽然这是自包含的)试图“调用”三个方法,但不能与 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];
}
4

2 回答 2

1

经常使用时,拥有一系列函数是常见的做法。例如,考虑这个回调类。

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();

如果我们运行它,我们会看到它只记录我们的默认值。所以如果我们想绑定一些数据,我们可以使用bind函数。

函数.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();

最终结果

于 2013-08-25T07:00:25.950 回答
0

你正在做的方式就可以了。只需删除参数和括号:

代替:

this.lm_methods=[arc.pLocations,arc.pLikedLocations,arc.pLikedItems,arc.pLikedByTerm('surfing'),arc.pLikedByTerm('sailing')];

做:

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");
    });

会打印:

打招呼喊你好耳语你好

于 2013-08-25T07:06:08.417 回答