0

オブジェクト/関数/クロージャ (3 つすべてだと思いますか?) があり、そのインスタンスをページ上の複数の要素に個別に適用する必要があります。

var NS = NS || {};
NS.PLAJAX = function(){

   var pub = {};
   var self = this;


   pub.Init = function(FormRef){      
     // do stuff
   };   

   self.aPrivateFunction = function(){      
      // do stuff
   }

   return pub;
}();


// Apply a *copy* to each element with the given class
$(function(){
   $('.el-form-wrapper').each(function(index, Element){
      // Attempt #1
       NS.PLAJAX.Init(Element); // Doesn't make copies! 

      //OR, Attempt #2      
      var Newbie = new NS.PLAJAX(); // Throws a "not a constructor" error
      Newbie.Init(Element);
   });
});

各要素でこのクロージャ/オブジェクトの新しいインスタンスを取得するにはどうすればよいですか?

4

2 に答える 2

2

あなたが持っているのはただのオブジェクトです。ただし、newキーワードを使用するには、関数 (コンストラクター) が必要です。

コンストラクターから何かを返す必要はありません。このnewキーワードは、新しいオブジェクトを作成し、その新しいオブジェクトを として関数を呼び出し、thisそれを返します。thisパブリック メソッドは( )のプロパティに割り当てる必要がselfあり、プライベート メソッドはローカル変数にする必要があります。最終的には次のようになります。

var NS = NS || {};
NS.PLAJAX = function(){
   var self = this;


   self.Init = function(FormRef){      
     // do stuff
   };   

   var aPrivateFunction = function(){      
      // do stuff
   }
};


// Apply a *copy* to each element with the given class
$(function(){
   $('.el-form-wrapper').each(function(index, Element){   
      var Newbie = new NS.PLAJAX();
      Newbie.Init(Element);
   });
});
于 2013-09-25T04:42:37.253 に答える