[問題] javascript namespace的問題

看板Ajax作者 (飛翔的想法)時間11年前 (2014/01/01 00:51), 編輯推噓0(0010)
留言10則, 2人參與, 最新討論串1/1
引用 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

01/01 01:14, , 1F
並不限定只能用this阿
01/01 01:14, 1F

01/01 01:38, , 2F
var global.openhome = global.openhome || {}; 這是錯的
01/01 01:38, 2F

01/01 01:39, , 3F
要改成global.openhome = global.openhome || {};
01/01 01:39, 3F

01/01 01:39, , 4F
變數名稱只允許字母和底線,不允許dot
01/01 01:39, 4F

01/01 01:40, , 5F
省去這錯誤不看,這段的意思是將最外層的this變數傳入
01/01 01:40, 5F

01/01 01:41, , 6F
function內作為名為global的變數,可以當作alias
01/01 01:41, 6F

01/01 01:41, , 7F
之後要存取openhome要使用global.openhome來存取
01/01 01:41, 7F

01/01 01:42, , 8F
這邊比較重要的是root scope的this是代表window物件
01/01 01:42, 8F

01/01 01:49, , 9F
這行之後,要在root scope存取openhome的話要使用
01/01 01:49, 9F

01/01 01:50, , 10F
openhome, this.openhome, window.openhome其中一種
01/01 01:50, 10F
文章代碼(AID): #1ImlNw-M (Ajax)
文章代碼(AID): #1ImlNw-M (Ajax)