Kodum için işlevsel OOP stilini kullanmayı tercih ediyorum (modül modeline benzer), çünkü "yeni" anahtar kelimeden ve "bu" anahtar kelimesinin kapsamındaki tüm sorunlardan kaçınmam için bana yardımcı oluyor geri aramaları.JavaScript'te işlevsel OOP stili hakkında soru
Ama bununla ilgili birkaç küçük sorunla karşılaşıyorum. Bir sınıf oluşturmak için aşağıdaki kodu kullanmak istiyorum.
namespace.myClass = function(){
var self = {},
somePrivateVar1;
// initialization code that would call
// private or public methods
privateMethod();
self.publicMethod(); // sorry, error here
function privateMethod(){}
self.publicMethod = function(){};
return self;
}
Sorun şu ki, bu işlevler henüz tanımlanmadığı için, başlatma kodumdaki genel yöntemleri arayaamıyorum. Açık çözüm, bir init yöntemi oluşturmak ve "kendi kendine geri dönüş" hattından önce çağırmak olacaktır. Ama belki daha zarif bir çözüm biliyor musun?
Ayrıca, genellikle bu desende mirasla nasıl başa çıkıyorsunuz? Aşağıdaki kodu kullanıyorum ama fikirlerinizi ve önerilerinizi duymak isterim.
namespace.myClass2 = function(){
var self = namespace.parentClass(),
somePrivateVar1;
var superMethod = self.someMethod;
self.someMethod = function(){
// example shows how to overwrite parent methods
superMethod();
};
return self;
}
Düzeltme.
Genellikle bir dil tarafından verilen teknikleri kullanmamak bir _bad_ düşüncesidir. Bu, yeni olanı atlamamanız gerektiği anlamına gelir, bu sadece Javascript'te yapıldığı yoldur ve muhtemelen bu özel dildeki en iyi yoldur. –
Neden aramayı denemeden önce, neden en üstteki yöntemleri tanımlayamıyorsunuz? –
Gs, özel üyeler ile nesneler oluşturmak için kapaklar kullanarak bir dil tarafından verilen bir teknik olduğunu düşünüyorum. Douglas Crockford bile onu savunmaktadır. Daha önce bazı performans testleri yaptım ve az miktarda nesne için gerçekten önemli değil. (http://valums.com/b/) Ama benim için bir kod temizleyici yapar. –