2013-09-25 21 views
0

我有一个对象/函数/闭包(我认为这三个都是?),我需要将它的不同实例应用于页面上的多个元素。如何制作闭包功能的副本(新实例)?

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

你得到的只是一个对象。但是,要使用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); 
    }); 
}); 
+0

但是,如果你这样做是方式,'PLAJAX'不再是封闭。 – Nick

+0

@Nick:在PLAJAX的每个实例中仍然创建封闭函数'aPrivateFunction'。你为什么认为这不是封闭?你认为封闭是什么? – slebetman

+0

我认为我很混淆封闭与自我执行的函数,如'函数DoSomething(){}();' – Nick

0

我已经尝试这样做,它为我希望这将工作在V

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