2012-07-24 57 views
0

我有一個網站,使用JavaScript對象來保存各種功能和可變數據。包括一個JavaScript對象的部分分開

var Site = { 
    Page: { 
    ...some functions... 
    }, 
    Player: { 
    ...more functions and variables... 
    } 
} 

我遇到的問題是腳本所在的頭文件已增長到大約500行代碼。我想將頁面和播放器等部分分割成單獨的文件以便於操作。這樣做的一個障礙是一些函數依賴於PHP的輸出,並且必須保留在基本頁面上。有沒有辦法可以將單獨的文件包含到對象中並保留已經存在的結構?

+2

'site.foo = {...}; site.bar = {...};' – zerkms 2012-07-24 01:04:41

回答

1

請注意,按照慣例,以大寫字母開頭的變量保留給構造函數。

文件1:

var Site = Site || {}; 

Site.Page = {  
    ...some functions... 
} 

文件2:

var Site = Site || {}; 

Site.Player = { 
    ...more functions... 
}; 

你也可以讓你申報對象文本使用的擴展功能,那麼proerties和值複製到一個基本對象。或者您可以使用IIFE分配功能。如果您正在執行功能檢測並根據結果創建不同的功能,這很方便。

var Site = Site || {}; 

(function(global) { 

    function Player() { 
    // stuff 
    } 

    global.Site.Player = Player; 

    if (test) { 
    global.Site.someFn = function() { 
     // stuff 1 
    }; 

    } else { 
    global.Site.someFn = function() { 
     // stuff 2 
    }; 
    } 

    ... 

}(this)); 

或以上的某個版本。

0

不要將數據與邏輯混合。也就是說,「一些函數依賴於PHP的輸出」是一種代碼異味。如果你有這樣的代碼:

setSomeContent("<? echo $myobj->title() ?>"); 
setMoreContent("<? echo $myobj->description() ?>"); 

然後是時候備份一下。

首先,很容易打破你的JS。只需爲每個文件創建一個腳本標記就好。

<script src="main.js"></script> 
<script src="page.js"></script> 
<script src="player.js"></script> 

現在它們按順序裝入,所以我們可以肯定main是先裝入的。

// main.js 
var Site = { 
    // functions 
}; 

// page.js 
Site.Page = { 
    // functions 
}; 

// player.js 
Site.Player = { 
    // functions 
}; 

現在,當你從PHP的數據,將其導出爲網頁作爲JSON,存儲在它自己的變量:

var myObj = <? echo myObj->toJSON() ?>; 
Site.Page.setContentForObject(myObj); 

,然後完全傳遞給任何功能,你在你的JS都宣稱文件。數據和邏輯的分離依然相當乾淨。