最近我看到了下面的代碼創建一個JavaScript類:問題關於JavaScript類定義的特定模式
var Model.Foo = function(){
// private stuff
var a, b;
// public properties
this.attr1 = '';
this.attr2 = '';
if(typeof Model.Foo._init === 'undefined'){
Model.Foo.prototype = {
func1 : function(){ //...},
func2 : function(){ //... },
//other prototype functions
}
}
Model.Foo._init = true;
}
// Instantiate and use the class as follows:
var foo = new Model.Foo(); foo.func1();
我猜_init變量用來確保我們不會再次定義原型。另外,我感覺代碼更具可讀性,因爲我將所有內容都放在一個功能塊中(所以在oop-speak中,所有的屬性和方法都在一個地方)。 您是否看到上述代碼的任何問題?如果我需要在大型項目中創建大量類,那麼使用這種模式會有什麼缺陷?
所以,我認爲在原型函數中使用私有屬性會更簡單(帶閉包)。你會如何建議使用私人atuff?在類函數裏面有'this.func(){alert(a);}'這個東西嗎?爲什麼你不會在原型函數中使用私有屬性? – fenderplayer 2010-05-25 22:20:53
我不會在原型方法中使用私有屬性或參數給構造函數,因爲它們對於正在創建的實例是特殊的,而原型方法將應用於所有實例。然後,對Model.Foo()的第一次調用會產生一些獨特的效果,似乎很難維護。 – 2010-05-25 22:39:18
使用Javascript,我並不真正隱藏私處。我忘記了將原型成員推出功能塊,不允許私有變量。我決定我可以忍受這一點。如果你不能忍受這一點,你必須把這些功能放在構造函數中。但是不要像原來那樣將它們附加到原型上,因爲那些私有變量不再是每個實例的變量,而是跨實例共享。 – 2010-05-25 22:42:15