作者flyingIdea (飛翔的想法)
看板Ajax
標題[問題] javascript namespace的問題
時間Wed Jan 1 00:51:03 2014
引用
http://openhome.cc/Gossip/JavaScript/Namespace.html
的文章
----開始----
在設計程式庫時,若有名稱想避免別人佔用干擾,則有個慣用手法。例如,若不想被別人
佔用干擾global這個名稱,則可以如下:
(function(global) {
var global.openhome = global.openhome || {};
...
})(this);
也許你的匿名函式 初始中,不確定會用在哪個環境中,因此想使用global這個名稱作為
全域變數,一方面也怕別人干擾global這個名稱,使用以上手法,若是在瀏覽器 中,真
正的全域名稱this所參考的物件會傳入函式作為參數global參考的對象,而global為區域
變數,所以不受外部其它程式庫所定義的外部變數干擾。
----結束----
這一段看不太懂@@~
請問一下~當這一段被呼叫後
裡面的變數(例如openhome)我要怎麼取用?
是用this.openhome嗎?
我想要用這種方式建立函式庫一直建立不起來....
麻煩眾版友幫解答我的問題QQ~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.39.73.18
1F:→ mmis1000:並不限定只能用this阿 01/01 01:14
2F:→ s540421:var global.openhome = global.openhome || {}; 這是錯的 01/01 01:38
3F:→ s540421:要改成global.openhome = global.openhome || {}; 01/01 01:39
4F:→ s540421:變數名稱只允許字母和底線,不允許dot 01/01 01:39
5F:→ s540421:省去這錯誤不看,這段的意思是將最外層的this變數傳入 01/01 01:40
6F:→ s540421:function內作為名為global的變數,可以當作alias 01/01 01:41
7F:→ s540421:之後要存取openhome要使用global.openhome來存取 01/01 01:41
8F:→ s540421:這邊比較重要的是root scope的this是代表window物件 01/01 01:42
9F:→ s540421:這行之後,要在root scope存取openhome的話要使用 01/01 01:49
10F:→ s540421:openhome, this.openhome, window.openhome其中一種 01/01 01:50