2011-03-08 95 views
1

來自JS的Ruby,我認爲如果我在這兩者之間進行比較和對比,將會很容易瞭解。當我偶然發現Ruby toplevel時,我不禁想到它與JavaScript中的全局對象(窗口對象)類似。Ruby toplevel == JS全局對象?

我是否正確地做出這個假設?

回答

1

這不只是兩個對象作爲this/self任何其他對象的範圍外以任何有意義的方式類似。在其他方面,它們是完全不同的。在頂層之外沒有通常有用的方式來提及main,就像window那樣。全局變量是真正的全局變量,並且在main上下文中定義的常量或方法實際上並未在main上定義,而是在Object類上定義的。

+0

你可以通過訪問'TOPLEVEL_BINDING'常量來引用ruby頂層的'binging'。 – horseyguy 2011-03-09 09:23:36

0

,你錯了。

Ruby的頂層只是一個Object。每個頂級層次都以Object結尾。換句話說,每一件事都被視爲一個對象。

您正在混淆頂級對象與在所有實例之間共享的對象。

在Javascript中,窗口對象是頂級的,可以在同一頁面跨多個調用共享(可以稱之爲靜態)。那就是爲什麼我們把它稱爲全局對象。

其正確的說,在Javascript和Ruby的頂層都是一個對象(Window仍然是javascript中的一個對象)。