2012-12-02 29 views
10

Aşağıdaki koda sahibim. Bu bir JavaScript modülü.Javascript Modülleri

(Cahootsy.scope = (function() { 
     return this; 
    })()).Cahootsy = Cahootsy; 

Ben 'bu' modülü başvuran bir nesne oluşturup ardından küresel Cahootsy değişkene Cahootsy değişkeni atar düşünüyorum:

(function() { 

    // Object 
    var Cahootsy; 

    Cahootsy = { 
     hello: function() { 
      alert('test'); 
     }, 
    }; 

    (Cahootsy.scope = (function() { 
     return this; 
    })()).Cahootsy = Cahootsy; 

    return Cahootsy; 

}).call(this); 

ben bölümü anlamıyorum. Anlamadığım şey, 'bu' nedeninin Cahootsy.scope

cevap

6

Öyle gibi biraz azaltabilir kırabilir:

var getScope = function() {return this;} 
Cahootsy.scope = getScope(); 
getScope().Cahootsy = Cahootsy; 

Ne yapar (her zaman genellikle window değil) küresel kapsamını alır. Ardından, nesnesinin nesnesinin scope özelliği aracılığıyla genel kapsam için bir bağlantı oluşturur ve başka bir bağlantı da kapsamın Cahoosty özelliği aracılığıyla olur.

Sonuç olarak, bir tarayıcıda, nesne window.Cahootsy olur ve window.Cahootsy.scope pencereye geri gider.

+0

Modül neden global kapsam için bir referansa sahip olur? Ayrıca, neden sadece Cahootsy.scope = window 'yapmak değil? –

+3

Çünkü bahsettiğim gibi, 'window' her zaman global kapsam değildir. Örneğin, JavaScript Node.JS üzerinde çalıştırıldığında, tarayıcı yoktur ve bu nedenle "window" yoktur. –

+0

Bu, küresel kapsamı elde etmek için hacky bir yol gibi görünüyor! :) –

3

(function() { return this; })()'a atanması nedeninin genel nesneyi döndürmesidir.

Bu ifade (gelecekte kullanılmak üzere) genel nesneyi Cahootsy.scope ayarlar ve ayrıca dış dünyaya Cahootsy ortaya çıkarmak için globalobject arasında Cahootsy özelliğini ayarlar.