Board logo

標題: 請問一個用物件做命名空間的問題 [打印本頁]

作者: bert507    時間: 2013-10-12 14:44     標題: 請問一個用物件做命名空間的問題

各位大大小弟看書學習遇到一些無法理解的部分,還請各位大大能解惑:
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");
作者: wmh    時間: 2013-10-14 03:12

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

window.parent 跟 window.MYAPP 是不同的東西,沒錯喔。
作者: hasschi    時間: 2014-4-9 11:24

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

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

圖型化:

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




歡迎光臨 jsGears.com 技術論壇 - AJAX, JavaScript, jQuery, 網站開發, 前端效能優化 (http://jsgears.com/)