如何制作闭包函数的副本(新实例)?

时间:2013-09-25 04:33:41

标签: javascript jquery

我有一个对象/函数/闭包(我认为这三个都是?)我需要将它的单独实例应用于页面上的多个元素。

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

如何在每个元素上获取此闭包/对象的新实例?

2 个答案:

答案 0 :(得分:2)

你所拥有的只是一个物体。但是,要使用new关键字,您需要一个函数(构造函数)。

无需从构造函数返回任何内容。 new关键字创建一个新对象,使用该新对象调用该函数为this,然后返回该对象。应将公共方法分配给thisself)的属性,私有方法应该是局部变量。你最终得到的是这样的:

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

答案 1 :(得分:0)

我试过这个,它对我有用,希望这对你有用。

var NS = NS || {};

NS.PLAJAX = function(){

   var pub = {};
   var self = this;


   pub.Init = function(FormRef){      
     alert(FormRef);
   };   

   self.aPrivateFunction = function(){      
      alert("private");
   }

   return pub;
};

//访问对象NS

   $(function(){
  $('.el-form-wrapper').each(function(index, Element){
       var a=NS.PLAJAX();
       console.log(typeof(a));
       a.Init("gg"); // Doesn't make copies! 

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

参见 demo