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

  • SoundHound

    SoundHound

    8 Mart 2006
  • Strata1000

    Strata1000

    28 EYLÜL 2009
  • Tomas N

    Tomas N

    14 Kasım 2010