程式碼程式庫:顧名思義,就是放代碼的倉庫。在Javascript若大的一個倉庫中,我們可以開闢自己的一個小倉庫,存放自己編寫的代碼。那如何開闢自己的小倉庫呢,它有什麼意義呢。下面談談我的理解。
1、建立程式碼程式庫
大家編程的時候,應該會遇到這樣的問題,比如去空格,向某個元素後面插入一個元素,瀏覽器的某些相容等問題;它們出現的頻率很高,解決的方法卻是相同的(函數相同)。在這種情況下如果我們仍然在寫重複的代碼,是不是就有些太過機械化了呢。這讓我想到了“物件導向的思想”------>把相同的東西抽出來放到單獨的類中,用的時候可以通過繼承或調用以解決問題,這樣實現了代碼的複用,提高了編程效率。在這裡我們就可以利用程式碼程式庫,來解決代碼上面重複問題。
2、建立命名空間
在建立自己程式碼程式庫之前,我們往往會先開闢一塊自己的空間,也就是所謂的命名空間;然後再存放那些常用的代碼。
大家都知道,命名空間可以解決命名衝突的問題。在這裡之所以先建立它:當然也是有原因的,呵呵下面就聽我細細道來:
我們知道物件導向編程中出現多個同名函數,根據參數個數和傳回型別決定實現那個函數,很好的實現了功能的擴充,這就是所謂的重載。然而在JavaScript也可以出現多個同名函數,不同的是它總是執行最後一個,前面的被忽略掉;也就是說Javascript中存在的是虛假的重載,而並非真正意義上的重載。這樣就可能會導致應該實現的功能,沒有實現的現象。所以我們就引入命名空間,避免函數的重名來解決功能被覆蓋的問題。
因為自己對自己空間的東西了如指掌,空間內命名重複的現象幾乎可以杜絕;也不用擔心與外面的函數重名,因為他們的命名空間不同。
3、執行個體:自己的程式碼程式庫
function(){window['HXJ']={}//註冊命名空間(實質就是給window對象添加屬性'HXJ',這個屬性時一個對象)//函數function func1(){alert("HelloWorld"); }window['HXJ']['func1']=func1;//向命名空間HXJ中註冊func1函數(實質就是給HXJ對象添加方法) //函數function func2(){alert('你好');} window['HXJ']['func2']=func2;//向命名空間註冊func2}
涉及到的知識點:
1)window['HXJ']={}
這就是我申請了一個命名空間,其實就是給window對象添加了一個屬性:屬性名稱即命名空間名,屬性值是一個對象。
也可以寫成:window.HXJ=New Object();
2. window['HXJ']['func1']=func1
就是給HXJ對象添加了一個方法;也可以寫成,window.HXJ.func1=function(){};
3. 調用方法執行
HXJ.func1(), 自訂屬性和方法與其他的屬性和方法一樣,window可以省略
4. 命名空間,解決了重名的問題。
5. 整個代碼的包含在一個匿名函數內部,在瀏覽器載入頁面時JS代碼就會執行,這樣就保證了代碼載入完畢之後,命名空間建立完畢。
4、知識小結:
注意:
命名空間名不要太福士化,以免命名空間名相同。
優點:
通過命名空間建立程式碼程式庫,降低耦合性:代碼更加靈活,複用性更強,問題更加簡單。
這裡也體現了物件導向的思想,但可不要忘記Javascript只是基於物件導向呦。