0

現在、私はプライベート変数funcsでオブジェクトを作成するコンストラクターを定義しました。

extendメソッドは、funcs配列に新しい関数を追加します。

resolve関数は、funcs配列内のすべての関数を呼び出します。

var extendableFunc = function() {

   var funcs = [];

   this.resolve = function () {
      for(var i=0; i<funcs.length; i+=1) {
         funcs[i]();

      }
   };

   this.extend = function(newFn) {
      funcs.push(newFn);
   }

};


var exampleExt = new extendableFunc();

exampleExt.extend(function() {

   alert("hello!");
});

exampleExt.resolve();

同じ関数を複数のextendableFuncオブジェクトのfuncs配列に追加するには、次のような関数を記述します。

var extendMultiple = function(exts, func) {
   for(var i=0; i<exts.length; i+=1) {
      exts[i].extend(func);
   } 
}

ただし、これにより、各funcs配列に追加する関数の新しいコピーが作成されると思います。

呼び出し配列に関数を追加する場合は、関数を1つだけにしたいのですが、配列にはその関数への参照だけがあります。

これはどのように達成できますか?

4

1 に答える 1

3

関数は JavaScript オブジェクトの一種であり、参照によって渡されるか割り当てられます。関数参照を配列に入れても、関数のコピーは作成されません。

于 2013-03-17T01:16:49.040 に答える