2013-06-06 52 views
0

我在JS漂亮的空中接力新的有下面的代碼至今:JS OOP - 結構在多個文件中

(function (ns) { 

     ns.addSection = function (name, def) { 
      ns[name] = new def(); 
     } 

    }(this.PG_GuiHelper = this.PG_GuiHelper || {})); 


/** 
* HOVERTIP 
* 
* shows submenu on click/hover 
*/ 
PG_GuiHelper.addSection('hovertip',function(){ 

    var section = this; 

    /** 
    * init 
    */ 
    section.init = function() { 
     section.registerListener(); 
    } 

現在我有助手爲形式的第二個文件。還有像這個代碼一樣的ns閉包。兩者都很好。

目標:

文件ns.js

(function (ns) { 

    ns.addSection = function (name, def) { 
     ns[name] = new def(); 
    } 

}(this.PG_Library = this.PG_Library || {})); 

,現在我的問題:我如何可以在新的「部分」添加到現有hovertip幫手得到這個電話至少:PG_Library.guiHelper.hovertip.init();

現有的調用現在是:PG_GuiHelper.hovertip.init()。我希望你明白我的意思。 1 ns函數適用於所有文件。每個文件都可以有各自的小節。並用PG_Library.section.subsection.function()處理。

回答

1

使用此:

window.PG_Library.guiHelper = window.PG_GuiHelper; 

你的情況,你添加PG_LibraryPG_GuiHelperwindow,所以這會奏效。

如果你想有一個單一的全球性(這是一個好主意:-))你可以使用:

var PG = {}; 

PG.GuiHelper = {}; 

(function (ns) { 

    ns.addSection = function (name, def) { 
     ns[name] = new def(); 
    } 

}(PG.GuiHelper)); 

/** 
* HOVERTIP 
* 
* shows submenu on click/hover 
*/ 
PG.GuiHelper.addSection('hovertip', function() { 

    var section = this; 

    /** 
    * init 
    */ 
    section.init = function() { 
     section.registerListener(); 
    } 
}); 

分別:PG.Library.guiHelper = PG.GuiHelper;

+0

thx!這工作正常,但我不喜歡添加everthing窗口對象,我必須創建函數並註冊它seperatly。 – roman

+0

在這種情況下,不要使用'this',因爲'this'是對'window'的引用,在你的情況下。 –

+0

檢查我的編輯,看看你如何重構不能創建多個全局變量。 –

0

您可以簡單地添加現有PG_GuiHelper作爲新章節給您PG_Library

PG_Library.addSection("guiHelper", function() { 
    return PG_GuiHelper; 
});