來自JS的Ruby,我認爲如果我在這兩者之間進行比較和對比,將會很容易瞭解。當我偶然發現Ruby toplevel時,我不禁想到它與JavaScript中的全局對象(窗口對象)類似。Ruby toplevel == JS全局對象?
我是否正確地做出這個假設?
來自JS的Ruby,我認爲如果我在這兩者之間進行比較和對比,將會很容易瞭解。當我偶然發現Ruby toplevel時,我不禁想到它與JavaScript中的全局對象(窗口對象)類似。Ruby toplevel == JS全局對象?
我是否正確地做出這個假設?
這不只是兩個對象作爲this
/self
任何其他對象的範圍外以任何有意義的方式類似。在其他方面,它們是完全不同的。在頂層之外沒有通常有用的方式來提及main
,就像window
那樣。全局變量是真正的全局變量,並且在main
上下文中定義的常量或方法實際上並未在main
上定義,而是在Object類上定義的。
否,你錯了。
Ruby的頂層只是一個Object。每個頂級層次都以Object結尾。換句話說,每一件事都被視爲一個對象。
您正在混淆頂級對象與在所有實例之間共享的對象。
在Javascript中,窗口對象是頂級的,可以在同一頁面跨多個調用共享(可以稱之爲靜態)。那就是爲什麼我們把它稱爲全局對象。
其正確的說,在Javascript和Ruby的頂層都是一個對象(Window仍然是javascript中的一個對象)。
你可以通過訪問'TOPLEVEL_BINDING'常量來引用ruby頂層的'binging'。 – horseyguy 2011-03-09 09:23:36