2011-08-10 14 views
5

window neden self'un altında ve self'un window nesnesinin altında olduğunu anlayamıyorum.Pencere nesnesinde garip kendi nesnesi

sen veya Firebug-araçları dev ve self bu nesnenin altında olduğunu DOM window nesne var window yazmak için giderseniz. Garip kısım, window'un tekrar self'un altında olması!

Sen

window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self 

yazabilir ve hala window nesne olsun!

Nasıl ?! Yorumlarıma birine bir yanıt olarak

+0

http://stackoverflow.com/questions/6145544/self-document-this-top-window – Shaz

+0

Bkz. Daha önce kendini referanslama görmediniz mi? Örneğin, singleton şablonunda oldukça yaygındır ve javascript özel değişkenleri doğrudan içermediğinden, ona sonsuza kadar erişebilirsiniz ... Bu "IS" olgusunu söylemiyorum, fakat nedenini veya kullanım nedenini açıklayın – PhD

+0

olabilir Bu bir işlev değil bir nesnedir. JavaScript'te kendini referans alan bir nesne oluşturma yöntemi olsa bile, bunu öğrenmekten mutluluk duyarım. – Mohsen

cevap

5

:

bir döngüsel başvuru, bu yüzden bitmiyor. Derleyici yalnızca bir referans oluşturur. Sadece referansın oluşturulduğu orijinal nesnesine bir referans olması gerekir. Bu yüzden do window.window.window yapabilirsiniz ... Buna benzer: var obj = {}; obj.obj = obj; Yalnızca bir referans oluşturuldu, ancak bu, orijinaline bir referans oldu, böylece obj.obj.obj.obj.obj.obj.obj === obj.

Yorum burada görülebilir: Is window really global in Javascript?

+0

Tamam. var obj = {} ve sonra obj.obj = obj ama nasıl var obj = {}; obj.self = obj ;? Şimdi obj.self.obj undefined dönüşü – Mohsen

+0

@Mohsen: 'self'' window''nın bir özelliğidir. window.self === window '. Bu yüzden, 'window.self === window.self' de alacağınız mantıklı. Gönderindeki yorum sadece "window.window" ifadesini kullanıyordu. – Shaz

+0

JavaScript'te böyle bir şeyi nasıl üreteceğinizi biliyor musunuz? "ebeveyn ve kendini referanslandırma nesnesi": - \ – Mohsen

1

this page ve see here bakınız. window.window kendi başına bir referanstır, böylece window.window.window ... window'u tekrarlayabilirsiniz, her zaman geçerli pencereyi döndürür. self geçerli pencereye bir başvuru döndürür, bu yüzden burada aynıdır, her zaman DOMWindow Nesnesini döndürecektir.

+0

'a bir göz atın. window.window.window'un MDN bağlantısı aracılığıyla nasıl çalıştığını anlıyorum. Öyleyse kendi kendini referanslama nesnesini nasıl yapıyorsunuz? – Mohsen

+0

@Mohsen bunu diğer yorumlarınızdan birinde yaptınız 'var obj = {}; obj.self = obj; ' Şimdi, 'obj.self == obj.self.self == obj.self.self.self == obj'. – Pointy

+0

evet, obj.self.self.self ... doğru görünüyor. ama kendinde bunun bir sakıncası yok. Yani obj.self.obj çalışmıyor. (Eğer ?! yorumlarda kodu işaretlemek nasıl) – Mohsen

İlgili konular