2012-04-15 20 views
1

本地JavaScript構造函數/函數像Function,Object,Array是否總能在任何範圍內使用?它們是由全局對象或類似的甚至更高級別的東西繼承的?本機JavaScript的功能是否像「superglobals」一樣?

作爲一個例子,MooTools的包含在其自身執行的函數以下行:

var Function = this.Function; 

於是我問自己,有沒有在那裏這些本地構造變得不可用任何情況呢?也許在服務器端或嚴格的JS?或者它只是一個性能問題緩存本地參考?但是,如果是這樣,爲什麼不這樣做是這樣:

var Function = Function; 
+0

本地構造函數是全局對象(全局對象的屬性),所以是的,它們始終可用。 – 2012-04-15 13:50:49

+1

@ŠimeVidas,這不是永恆的真實。我可以輕易覆蓋它們,例如'Function = 6;'之後有一些棘手的方法來引用它們,但是全局引用肯定會以這種方式丟失。 – davin 2012-04-15 13:52:24

回答

1

它們具有相同的名稱,所以你不能做到這一點。

(function() { 
    var Function = Function; 

    return Function; 
})(); // undefined 

至於爲什麼它擺在首位的完成?爲了防止用戶錯誤或重新定義,並且爲了減少引擎必須查找範圍鏈的數量,相關的博客文章:http://blog.minite.ch/?p=47

當然,Function不是隻讀的,所以即使有人在全局命名空間中重新定義了Function,這也無濟於事。如果誰做到這一點應得的,雖然=)


編輯:如果他們真的沒希望防止用戶的錯誤,一個簡單的辦法是:

var Function = (function() {}).constructor; 

但它是毫無意義的,如上所述。

+0

哦,謝謝,很高興知道! :) – headacheCoder 2012-04-15 13:57:05

+0

minitech,你有鏈接了嗎? – loveNoHate 2014-02-11 00:02:50

+0

@dollarVar:啊,對不起,打破它。 http://web.archive.org/web/20120617142826/http://blog.minite.ch/?p=47 – Ryan 2014-02-12 03:31:40

相關問題