我正在查看qunit的代碼。爲什麼要附上窗口[編輯]
我的問題是爲什麼你想要通過屬性附加qunit對象到窗口對象。
這裏是鏈接到file。看看第11行。
如果我看一下使用螢火蟲的單元測試運行,你可以看到它是窗口的屬性。
附加信息:是否有特定的參考,用於在特定命名空間中聲明事物的最佳實踐?
我正在查看qunit的代碼。爲什麼要附上窗口[編輯]
我的問題是爲什麼你想要通過屬性附加qunit對象到窗口對象。
這裏是鏈接到file。看看第11行。
如果我看一下使用螢火蟲的單元測試運行,你可以看到它是窗口的屬性。
附加信息:是否有特定的參考,用於在特定命名空間中聲明事物的最佳實踐?
所有的全局對象(函數,變量等)只是窗口的子項,它是默認的上下文。
例如:window.jQuery
或window.$
它可能會更容易這樣......你會把他們還有什麼地方想的呢?當你在做一些這樣的事情時,最好的(或者至少是最簡單的)把它們粘在默認的地方。如果你正在做一些複雜的功能,對象等......最好把它們放在一個名稱空間或一個對象內。例如,jQuery的所有代碼都在jQuery
之下,而不是在DOM的根目錄中散落,如window.ajax
,而不是jQuery.ajax
。
這很簡單,但是當你處理幾件物品時可能矯枉過正,但如果是這種情況,確保它們是唯一的是一個好主意......通過在它們的對象前加上qunit-
作爲window
的屬性附加全局變量是不好的做法。所有全局變量應該使用var
來聲明。這是我的理由:
ReferenceError
。使用var
意味着JavaScript的提升生效,並緩解了這個問題。[[DontDelete]]
,這意味着您可以刪除全局變量。這很愚蠢。就我而言,事實證明window.x = 1
創建一個名爲x
一個全局變量的JavaScript的一個有趣的好奇心,但不應該使用,也不要在回答。但是,有很好的理由使用window
的屬性,因爲它是任何其他對象(或多或少)。在這些情況下,您應該使用全名,例如window.onload
而不是僅僅onload
。
「未聲明的全局變量將在創建ReferenceErrors時使用。」正確但不正確。如果你做benny = undefinedvar; benny的類型將變成「undefined」...如果你做了benny = undefinedvar.anothervar;它會拋出,因爲你試圖訪問未定義的屬性。 – Warty 2010-03-24 06:18:03
我想那不清楚。 「used」是指在表達式中使用,而不是用作左值(即在賦值中)。 另外,運行'x = y'會拋出'ReferenceError:y未定義'。 – bcherry 2010-03-24 06:45:54
您使用了哪些靜態分析工具? – Gutzofter 2010-03-24 17:19:16
所以最初你會開始在窗口的命名空間,並添加屬性? – Gutzofter 2010-03-24 02:32:28
所以我查閱了這個非常相同的頁面。並注意到有兩個window.jQuery和window. $ properties。是不是另一個別名? jQuery實際上加載了兩個屬性還是r他們指向相同的內存?有沒有辦法在firebug中找到內存地址? – Gutzofter 2010-03-24 02:39:22
@Gutzofter - 是的,'window。$'是'window.jQuery'的別名,因此您的代碼可以更短,例如''(選擇器)'而不是'jQuery(選擇器)'我不確定如何找到實際的內存地址,對不起:)另一個問題,是你從窗口開始,添加一些東西(比如說jQuery對象),那麼你可以添加到。 – 2010-03-24 10:06:14