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 オブジェクトのメソッドとして 2 つの関数を直接呼び出そうとしましたが、「Object# にはメソッド '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 に答える