2013-09-25 45 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