編寫js代碼

1.養成良好的編程習慣css

1.1如何避免js衝突編程

咱們能夠使用當即調用函數將腳本包起來,能夠有效控制全局變量,避免衝突隱患。瀏覽器

如:mvc

<script>框架

(function(){var a=123,b="hello world";...})();函數

</script>工具

....ui

<script>spa

(function(){var a,c="abc";...})();對象

</script>

爲了實如今不一樣腳本之間進行通訊,咱們能夠在window做用域下定義一個全局變量,把它做爲一個橋樑,完成匿名函數之間的通訊。可是爲了減小全局變量的個數,咱們能夠使用一個{}對象類型的變量做爲全局變量。若匿名函數間須要多個變量來作通訊橋樑,能夠將這些變量做爲全局變量的屬性。同時爲了防止屬性之間被相互覆蓋,咱們能夠添加命名空間來區分各個做用域中的同名屬性。

<script>

var GLOBAL={}; 

</script>

<script>

//=================================

//功能A

//工程師甲

//email:。。。

//最近修改時間:2009-11-4

//=================================

(function(){

var a=123,b="hello world";

GLOBAL.A={};

GLOBAL.A.str2=a;

GLOBAL.A.str=b;

})();

</script>

...

<script>

//=================================

//功能B

//工程師乙

//email:。。。

//最近修改時間:2009-11-4

//=================================

(function(){

var a=,c="abc";

GLOBAL.B={};

GLOBAL.A.str=b;

})();

</script>

...

<script>

//=================================

//功能C

//工程師丙

//email:。。。

//最近修改時間:2009-11-4

//=================================

(function(){

var a=GLOBAL.A.str2,b=GLOBAL.A.str;

var d=a+","+b;

})();

</script>

此外,爲了提升代碼的可維護性,咱們須要添加註釋。

綜上所述:讓js不產生衝突,須要避免全局變量的泛濫,合適使用命名空間以及爲代碼添加必要的註釋。

 

1.2給程序一個統一的入口--window.onload和DOMReady

網頁中的js從功能上,應該分爲兩個大部分-框架部分和應用部分。框架部分提供的是對js代碼的組織做用,包括定義全局變量,定義命名空間方法等,它和具體應用無關,每一個頁面都須要包括相同的框架,因此框架部分的代碼在每一個頁面都相同。應用部分提供的的頁面功能邏輯,不一樣頁面會有不一樣的功能,不一樣頁面應用部分的代碼也不一樣。

咱們能夠將功能代碼放在一個統一的函數入口中,如init()函數,方便對功能的添加和修改。咱們能夠在window.onload事件或DOMReady事件中調用init()函數。兩者的區別在於:window.onload須要當頁面徹底加載完成時纔會觸發,包括圖片,flash等富媒體;DOMReady只判斷頁面全部的DOM節點是否已經所有生成,至於節點的內容是否加載完成,它並不關心。因此DOMReady觸發的速度比window.onload更快。特別是當頁面內有大量圖片等富媒體資源時,DOMReady觸發好久以後window.onload纔會觸發。可是DOMReady並非js的原生事件,能夠使用一些js框架調用它。如jQuery中的$(document).ready();

另一種模擬DOMReady事件的方法是將init()的調用放在文件的尾部,此時DOM元素都已生成。

 

1.3 css放在頁頭、js放在頁尾

js加載會「阻塞」其後面內容的生成;若將css放在內容以後,頁面中的元素會沒有樣式。因此爲了防止頁面長時間空白或頁面沒有樣式,建議將css放在頁面頭部,js放在頁面尾部。

 

1.4 文件壓縮

爲了減小網頁大小,縮短網頁的下載時間,能夠使用壓縮工具對文件進行壓縮處理。經常使用的壓縮工具備Packer和YUI Compressor。Packer的網址是:http://dean.edwards.name/packer; YUI Compressor網址:http://developer.yahoo.com/yui/compressor.

 

2.JavaScript的分層概念和JavaScript庫

咱們能夠將js文件分爲3層,從下到上依次爲:base層、common層和page層。

base層有兩個職責。一個是封裝不一樣瀏覽器下js的差別,提供統一的接口,依靠它來實現跨瀏覽器的兼容工做。另外一個是擴展js語言底層提供的接口,讓它能提供更多更爲易用的接口。

common層依賴於base層提供的接口。common層提供可複用的組件,它是典型的mvc模式中的m,和頁面的具體功能沒有直接關係。common層的功能是給page層提供組件。

page層位於三層的最頂端。這一層和頁面裏的具體功能需求直接現骨幹,是mvc模式中的c。page層依賴於base層和common層。page層的功能是完成頁面內的功能需求。

2.1 base層

base層的接口從大的方向上看,能夠分爲3塊兒,一塊是用來操做DOM,包括獲取DOM節點和設置DOM屬性;一起用來操做事件,包括訪問event對象的屬性和設置事件監聽;還有比部分用來模仿其餘語言提供原生的js不提供的函數。咱們也能夠分別用GLOBAL.Dom,GLOBAL.Event和GLOBAL.Lang做爲base層函數的命名空間。

2.2 common層

common層和base層都是供page層調用的,兩者的區別在於common層提供的不是簡單的藉口,而是相對更龐大的組件。common層提供的組件並不像base層那麼通用,它和具體的功能相關,若是頁面裏不須要相關的工恩呢該,就不必加載。

2.3 page層

page層是mvc中的c,和頁面裏的具體功能需求直接相關。若是頁面裏的功能需求簡單,頁面裏能夠沒有base層代碼,能夠沒有common層代碼,但必定會有page層代碼。base層和common層都是屬於框架級的,page層是屬於應用級的,它能夠調用base層的接口和common層的組件。

相關文章
相關標籤/搜索