0

跟上 Javascript 学习的步伐。我正在查看以下代码,该代码旨在向对象添加函数以保持它们的唯一性,例如向事件类型的事物添加回调函数。

var store = {
    nextId: 1,
    cache: {},
    add: function(fn) {
        if(!fn.id){
            fn.id = store.nextId++;
            return !!(store.cache[fn.id] = fn);
        }
    }
};

该代码运行良好,但现在我想执行这些功能,但我无法弄清楚那部分。

到目前为止,我已尝试将这两个函数直接调用为 store.cache 对象的方法,这给了我错误“对象# 没有方法 'blah'”。我也试着做一个循环,好像 store.cache 是一个函数数组,但这也不起作用。

谢谢你的帮助。

4

2 回答 2

1

我会添加一个方法store,像这样

executeFunction: function(id) {
   var fn = store.cache[id];
   if (fn) return fn();
   else throw 'could not find function for id...';
}

然后你可以做

var result = store.executeFunction(someId);

您可以对此进行扩展,以便executeFunction获取应该应用于函数的上下文(范围)和参数。

于 2012-08-07T16:15:16.063 回答
0

有更简单的方法来存储回调列表,但要解决您的问题,只需执行以下操作:

var i;
for (i in store.cache) {
    store.cache[i]();
}

for (i in variable) 循环遍历变量的所有属性,并且 i 获取属性的键。

于 2012-08-07T16:17:29.443 回答