2011-05-04 18 views
5

Yenilikleri JavaScript'e buradan bulabilirsiniz.JavaScript Kapsamı: başvurulan ana nesnenin üyesi olan bir üyenin kapatılması

foobar adlı kullanıcının foobar adlı kapısının içinde bulunan foo üyesine nasıl başvuruda bulunabilirim?

var priv = { 

    foo: "bar", 

    foobar: (function() { 
     return this.foo === "bar"; 
    })() 

}; 

Yukarıdaki kod başarısız. İçinde this.foo, undefined'dur. this.foo'u priv.foo olarak değiştirirseniz, hala undefined olur. priv.foo ürününü foobar kapamasından nasıl referans alabilirim?

+2

gerçekten kapatılması aramak istiyorsunuz: O zaman da yine onu aramak için gerekiyorsa, foobarfoo sonra tanımlayabiliriz priv.foobar();

olarak diyebiliriz? – meze

+0

Ne yazık ki, ''() '' yi kaldırmayı denedim. foobar aslında birkaç düzine satırdır. :/ – DotNetQuestionDate

+0

Aşağıdaki cevabımda – meze

cevap

2

Onun başlatma sırasında kendi tanımı içinde bir nesnenin herhangi özelliklerini okumak mümkün değil o zaman prev undefined olacağı için. İçinde bir clojure çağırmaya çalıştığınızda, tanımlanmamış this veya priv anlamına gelir.

foobar: (function() { 
    return this.foo === "bar"; 
}) 

sonunda () olmadan:

Muhtemelen yazmak istedim.

var priv = { 
    foo: "bar" 
}; 

priv.foobar = (function() { 
    return priv.foo === "bar"; 
})() 
0

Sorun şu ki, bir kapatma tanımlamıyorsunuz -henüz başlatılmadı olarak foo işlevinize erişmenin herhangi bir yolu olduğunu sanmıyorum.

Tam olarak ne yapmaya çalışıyorsunuz? Aşağıdakiler örnek yapmaya çalışıyor benim anlamadığım eşdeğerdir ama tahminimce ben sorunun anlaşılması değilim ki:

// Set elsewhere 
var foo = "bar"; 

var priv = { 
    foo: foo , 
    foobar: foo == "bar" 
}; 
+0

açıklamasını yaptım Özetle, dev bir JS dosyasına sahibim. Bazı özel değişkenleri ve genel bir nesneyi tanımlar. Bu özel değişkenleri tek bir nesneye kapsüllemeye çalışıyorum, ancak bunun dışındaki her özel değişken başka bir özel değişkenin değerine bağlıdır. Bunun yerine, "foobar" 'un foo' değerinin kapalı olduğu bir çalışma zamanı, dinamik hesaplama olduğunu varsayalım. Mantıklı olmak? – DotNetQuestionDate

İlgili konular