SORU
15 Ocak 2015, PERŞEMBE


Bu kod bir kütüphane inşa kaydırma parçaları nedir ve ne için yararlıdır?

Bir kütüphane ve kod aşağıdaki yazabildi taklit ettim. Bu kod 'c' 'a' fonksiyon atanır nesne yarattı. Yani, 'a', çağrı c.a() yazmak zorunda kalacağım.

Ayrıca, 'c' bu nesne için daha fazla işlev eklemek için başardı. Bu kod içinde neler olduğunu anlamak istiyorum. Normal nesne yönelimli programlama gibi görünmüyor. Javascript bu tür bir programlama ne denir?

var c = (function(c) {
    if (c === undefined) {
        c = {};
    }

    function a() {
        alert(1);
    }
    c.a = a;
    return c;
}(c));

CEVAP
15 Ocak 2015, PERŞEMBE


Modül bir desen var. Temel gerçekten ne olduğunu anlamak için, bu yüzden bu deseni birçok çeşidi göreceksin, sadece bir taklit edemezsin.

Bu kod parçasının nokta bir nesne c (genellikle genel kitaplığı) tamamlamak için. Muhtemelen uygulama kodu çok benzer parçalar, tüm c, muhtemelen kendi dosyasında her adet bina var.

Kütüphane işlevi için bağımsız değişken olarak geçirilen c henüz ( c === undefined) yok nesne halinde oluşturulur. Bu mümkün preexecuted bir dosya düzeni ya da bağımlı bir hale getiriyor.

Atamanın sağ tarafında hemen çağrılan bir işlevi olduğunu IIFE (Hemen Çağrılan İşlev İfadesi), bir. Bu yapının avantajı olan değişkenler (örneğin a işlevi) (küresel) dış kapsam kirletmeden ilan edilebilir bir kapsam oluşturur. Burada nokta a neyse taburcu olur ama bir modül genellikle (özel) bazı iç fonksiyonları ve değişkenlere bağlı olarak tartışılır.

Bir açıklama ihtiyacı olabilecek bir ayrıntı : tüm bu dosyalarıbenziyoronlar tanımlamak yeni bir değişken c ama sorun yok, olsa bile dosyaları birleştirilmiş : var bildirimleri gelmiyor tanımlamak yeni bir değişken zaten var (değişken tanımlanmış bütün kapsamı, genel olarak burada, daha önce işaret beyannamesi).

Bu yaz için başka bir yol olurdu

var c = c || {}; // ensure the c variable is defined, and initialize its value it if necessary

(function() { // let's use an IIFE to have a protected scope and not pollute the global one
  function a() {
    alert(1);
  }
  c.a = a; // let's augment c
})();

Bu muhtemelen daha nettir

  • bu açıkça iki adımı (c c tamamlama kullanarak bir HAYAT başlatma) ayırır
  • aynı adı taşıyan c iki değişkene bağlı değil
  • daha az ayrıntılı

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Adams

    Bryan Adams

    30 Mart 2006
  • Kupa World

    Kupa World

    1 EYLÜL 2011
  • Moodle

    Moodle

    11 Mayıs 2010