請問一個用物件做命名空間的問題
各位大大小弟看書學習遇到一些無法理解的部分,還請各位大大能解惑:Q1.不是很理解為什麼在firebug中顯示出來的命名空間路徑會是槽狀結構?
Q2.console.log(parent); 跟 console.log(MYAPP); 在firebug中為什麼顯示的是不一樣的?
以下是書籍中的程式片段:
var MYAPP = MYAPP || {};
MYAPP.namespace = function(ns_string){
var parts = ns_string.split("."),
parent = MYAPP,
i;
if(parts[0]==="MYAPP"){
parts = parts.slice(1);
}
//判斷在MYAPP全域物件中有沒有這次要新增的屬性
for( i = 0; i < parts.length; i += 1 ){
//如果屬性不存在就建立
if( typeof parent[parts[i]] === "undefined" ){
parent[parts[i]] = {};
}
parent = parent[parts[i]];
}
console.log(parent);
console.log(MYAPP);
return parent;
}
MYAPP.namespace("MYAPP.a.b.c.d"); 你的命名空間指的是 MYAPP.a.b.c.d 嗎?
這樣的結構在 JavaScript 是物件中的物件,所以是槽狀結構沒錯。
你那段程式是用這樣的結構來模擬命名空間~
window.parent 跟 window.MYAPP 是不同的東西,沒錯喔。 [i=s] 本帖最後由 hasschi 於 2014-4-9 11:26 編輯 [/i]
因為這一行的關係:
parent = parent[parts[i]];
圖型化:
{
namespace: function 暱名函數(ns_string){...},
a:{
b:{
c:{
d:{} <-- parent 指向這個物件
}
}
}
} <-- MyAPP 指向這個物件
頁:
[1]