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

  • PlayStation

    PlayStation

    16 Aralık 2005
  • Professor Messer

    Professor Me

    27 NİSAN 2007
  • technodromeband's channel

    technodromeb

    28 NİSAN 2011