Sorununuz çoğunlukla stilistik olduğundan (kurucuyu bir sürü beyanla doldurmak istemeyen), stilistik olarak da çözülebilir.
Benim bakış açımdan, birçok sınıf tabanlı dil yapıcısı sınıf adının kendisinden sonra gelen bir işlev olabilir. Stilistik olarak bunu, stilistik olarak hala mantıklı olan ancak yapıcıda gerçekleşen tipik eylemleri yaptığımız tüm özellik bildirimleriyle gruplamayan bir ES6 sınıfı yapmak için kullanabiliriz. Sadece gerçek JS yapıcısını "bildirim alanı" olarak kullanırız, daha sonra "kurucu şeyler" alanı olarak değerlendirdiğimiz fonksiyon adlı bir sınıf yaparız ve onu gerçek kurucunun sonunda çağırırız.
"katı kullanın";
sınıf MyClass
{
// sadece özelliklerinizi bildirin ve sonra bunu çağırın. ClassName (); buradan
Yapıcı () {
this.prop1 = 'filan 1';
this.prop2 = 'filan 2';
this.prop3 = 'filan 3';
this.MyClass ();
}
// artık her türlü "yapıcı" malzeme, artık beyanlarla karıştırılmıyor
Sınıfım() {
ne istersen yap();
}
}
Her ikisi de yeni örnek oluşturuldukça çağrılır.
Sortaları ve yapmak istediğiniz diğer kurucu eylemlerini ayırdığınız 2 kurucuya sahip olmak gibi ve stilistik olarak, neler olduğunu anlamak çok zor değil.
Çok sayıda bildirim ve / veya örneklemede gerçekleşmesi gereken ve iki fikri birbirinden ayrı tutmak isteyen birçok eylemle uğraşırken kullanmanın güzel bir stil olduğunu düşünüyorum.
NOT : Çok kasıtlı olarak "başlatma" ( init()
ya da initialize()
yöntem gibi ) tipik deyimsel fikirleri kullanmayın çünkü bunlar genellikle farklı kullanılır. İnşa etme ve başlatma fikri arasında bir tür varsayılan fark vardır. İnşaatçılar ile çalışan insanlar, kendilerine örneklemenin bir parçası olarak otomatik olarak çağrıldıklarını bilirler. init
Birçok insanın ikinci bir bakış olmadan, form boyunca bir şeyler yapmaları gerektiğini varsayacağı bir yöntem gördüğünüz için var mc = MyClass(); mc.init();
, genellikle bu şekilde başlatırsınız. Sınıfın kullanıcı için bir başlatma işlemi eklemeye çalışıyorum değilim, ben eklemek çalışıyorum için sınıfın kendisinin yapım sürecinin.
Bazı insanlar bir an için iki kere yapsalar da, asıl mesele budur: Onlara niyetin inşaatın bir parçası olduğunu bildirir, bu da onları biraz çift al ve git yapsa bile "bu değil ES6 kurucuları nasıl çalışır "ve gitmek için gerçek kurucuya bir saniye bakarak" oh, altta diyorlar, görüyorum ", bu niyetini iletmekten (veya yanlış bir şekilde iletmekten) ve muhtemelen bir sürü elde etmekten çok daha iyi insanlar yanlış kullanıyor, dışarıdan başlatmaya çalışıyor ve önemsiz. Bu önerdiğim kalıp için çok kasıtlı.
Bu paterni takip etmek istemeyenler için tam tersi de işe yarayabilir. Bildirimleri başlangıçta başka bir işleve göre düzenleyin. Belki "mülkler" veya "publicProperties" ya da başka bir ad verin. Sonra diğer şeyleri normal kurucuya koyun.
"katı kullanın";
sınıf MyClass
{
özellikleri() {
this.prop1 = 'filan 1';
this.prop2 = 'filan 2';
this.prop3 = 'filan 3';
}
constructor () {
this.properties ();
ne istersen yap();
}
}
Bu ikinci yöntemin daha temiz görünebileceğini, ancak properties
bu yöntemi kullanarak bir sınıfın başka bir sınıfı genişletmesiyle geçersiz kılındığı doğal bir sorun olduğunu unutmayın . Bundan properties
kaçınmak için daha benzersiz adlar vermeniz gerekir . İlk metodumda bu sorun yok çünkü kurucunun sahte yarısı dersten sonra adlandırılıyor.
this.member = member
20-30 parametre ile yapıcı bir tekrar olacak olmasıdır ?