SORU
2 Ocak 2012, PAZARTESİ


Yapıcı işlevi, vs Fabrika fonksiyonları

Biri bir yapıcı işlevi ve Javascript fabrika fonksiyon arasındaki farkı açıklığa kavuşturmak için.

Diğerinin yerine kullanmak için ne zaman?

CEVAP
2 Ocak 2012, PAZARTESİ


Temel fark, bir yapıcı işlevi kullanılır new anahtar kelime (neden olan JavaScript için otomatik olarak yeni bir nesne, set this işlev içinde bu nesne, dönen nesne):

var objFromConstructor = new ConstructorFunction();

Fabrika bir fonksiyon gibi denir "normal" fonksiyonu

var objFromFactory = factoryFunction();

Ama dikkat edilmesi gereken bir "fabrika" bunun için ne yapmalıyım yeni bir dönüş örneğinin bazı nesne: olmaz biz buna "fabrika" fonksiyonu ise sadece dönen bir boolean falan. Bu otomatik olarak new gibi bir durum değil ama bazı durumlarda daha fazla esneklik izin vermiyor.

Çok basit bir örnek işlevleri yukarıda başvurulan böyle bir şey olabilir:

function ConstructorFunction() {
   this.someProp1 = "1";
   this.someProp2 = "2";
}
ConstructorFunction.prototype.someMethod = function() { /* whatever */ };

function factoryFunction() {
   var obj = {
      someProp1 : "1";
      someProp2 : "2";
   };
   // other code to manipulate obj in some way here
   return obj;
}

Elbette fabrika fonksiyonları basit bir örnek, çok daha karmaşık yapabilirsiniz.

Bazı insanlar tercih için kullanmak Fabrikası fonksiyonları için her şey çünkü onlar yokmuş gibi olması için hatırlamak için kullanın. new (EDİT: ve bu bir sorun, çünkü olmadan new çalışır yine çalışır ama değil beklendiği gibi). Ben görmüyorum gibi bir avantajı: new temel bir parçası olan dil yani bana kasten kaçınarak biraz keyfi - belki de kaçının diğer anahtar sözcükler gibi else.

Fabrika işlevleri için bir avantaj döndürülecek nesneyi birkaç farklı türde olabilir bazı parametrelere bağlıdır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Louis C.K.

    Louis C.K.

    18 HAZİRAN 2006
  • Top10Series

    Top10Series

    26 Kasım 2008
  • undrmyumbrellaa

    undrmyumbrel

    25 Temmuz 2012