2011-08-09 57 views
1

我創建了一個功能,我們命名空間,但如何擴展其功能秒參數作爲JavaScript函數或對象,並追加到

碼的空對象:

MY.property = function (str, obj, prevent) { 

    var ns = obj || MY, 
      k = str.split("."); 
    while (k.length > 1) { 
     if (!prevent && typeof ns[k[0]] === "undefined") { 
      ns[k[0]] = {}; 
     } 
     if (ns[k[0]]) { 
      ns = ns[k.shift()]; 
     } else { 
      return; 
     } 
    } 
    return [ns, [k[0]]]; 
}; 


MY.namespace = function (str) { 
    var ns = this.property(str), 
    k = str.split("."); 
    if (k[0] === "MY") { 
     k.shift(); 
    } 
    if (ns && ns[0][ns[1]]) { 
     return; 
    } else { 
     ns[0][ns[1]] = {}; 
    } 
    return true; 
}; 

這隻適用於MY .namespace(「test」),var My.test = function(){};但是我怎麼能像這樣擴展它MY.namespace(「test」,function(){});和MY.namespace(「test」,{});

感謝您的任何幫助或建議。

回答

1

example

特殊操作typeof應該足以做到這一點:

My.namespace = function (str, obj) { 

    if (obj) { 
      this[str] = obj; 
    } 
    .... 

My.namespace('test', function() {console.log('here');}); 
My.test() 

編輯:更新的例子:http://jsfiddle.net/qk6Kj/1/

+0

爲什麼'如果(OBJ || typeof運算obj中的第一OBJ ===「功能」)'?不會'如果(obj)'做同樣的事情嗎?或者,如果這只是'if(typeof obj ===「function」)'確保obj是一個函數? – jfriend00

+0

@jfriend,你是對的。我組合了一個if else語句,但沒有真正考慮它。 – Joe

+0

@joey而不是傳遞另一個參數,如果我可以使用typeof參數[1] ===「Object」|| typeof argument [1] ===「函數,因爲我想傳遞第二個參數作爲對象或函數 – paul