返回列表 發帖

請問一個用物件做命名空間的問題

各位大大小弟看書學習遇到一些無法理解的部分,還請各位大大能解惑:
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");
50 字節以內
不支持自定義 Discuz! 代碼

你的命名空間指的是 MYAPP.a.b.c.d 嗎?
這樣的結構在 JavaScript 是物件中的物件,所以是槽狀結構沒錯。
你那段程式是用這樣的結構來模擬命名空間~

window.parent 跟 window.MYAPP 是不同的東西,沒錯喔。
To infinity and beyond!

TOP

[i=s] 本帖最後由 hasschi 於 2014-4-9 11:26 編輯 [/i]

因為這一行的關係:
parent = parent[parts[i]];

圖型化:

{      
    namespace: function 暱名函數(ns_string){...},
    a:{
        b:{
            c:{
                d:{}   <-- parent 指向這個物件
            }
        }
    }
}  <-- MyAPP 指向這個物件

TOP

返回列表 回復 發帖