天天看點

從零開始學_JavaScript_系列(17)——dojo(6)(聲明一個類declare)

(71)聲明一個類declare

作用:

封裝一個類,然後可以通過調用這個類,來調用其類方法。

優點:

①可以繼承其他類的類方法;

②假如我們需要使用一個類的類方法,而這個類依賴于5個插件。如果正常調用的話,我們需要在每個使用這個類的js檔案裡,調用這5個插件。當我們使用封裝時,我們隻需要調用這個類即可。而調用這個類的方法很簡單。

③可以使得代碼子產品化,按需加載。例如,我有封裝好的A類B類C類,起初我用的是A類(假設A類依賴于20個插件),然後我可能棄用A類改用B類(B類使用與A類不同的15個插件)和C類(C類使用另外10個插件)。

在之前的情況下,我們需要删除A類(包括其依賴的插件比如dojo/dom),然後依次删除其類方法(還要小心沒有删錯,或者少删了什麼東西)。當删除完之後,依次加入B類和C類的插件、參數、方法等。灰常麻煩,而且容易搞錯。

使用封裝的類後,我們隻需要提前寫好B類和C類,然後在js裡導入B類和C類(像導入插件那樣導入),在回調函數的參數中,加上B類和C類的參數。然後聲明一個B類的執行個體和一個C類的執行個體,通過這個執行個體來調用B類和C類的方法即可。

(如果不太明白,建議先去看看我的部落格:

http://blog.csdn.net/qq20004604/article/details/51388185

搜尋關鍵字:構造函數)

如果還不太明白,可以這麼了解,我聲明了一個對象A,這個對象A有一個方法add,其效果是給2個參數,傳回他們的和。

傳回值是5

聲明一個類,就類似fun這個變量,

使用這個類,就是new fun()生成一個執行個體

調用這個類方法,就是p.add(2,3)這樣調用它。

如果還不明白?!那先看下去,然後把代碼拿過來用用,再改改就知道了。

如何聲明一個類:

這是非常簡單的一個封裝類,我沒有為她建立一個構造函數,也隻給他設定了一個方法add(這些都是在declare第三個參數中)。他的類名是aClass(第一個參數),沒有繼承任何類(declare第二個參數null)。

在聲明他之後,我建立了一個他的執行個體m,然後最後通過m調用add這個方法。

這裡是在同檔案聲明,我們聲明類的目的,是為了在另外一個檔案中使用它,這樣才能起到封裝的作用(調用類,并使用其提供的API接口)。

那麼如何在另一個檔案中聲明并調用一個類呢?(封裝類)

如何封裝類:

同樣是上面那個方法。

①首先,我們找到dojo檔案夾,就是有dojo、dijit這兩個檔案夾的位置,在它旁邊建立一個myclass檔案夾。

②然後在其中建立一個add.js這個檔案,記住這個檔案名(還有myclass檔案夾的名字)

③打開那個js檔案,把以下這段代碼放進去:

④打開你的html檔案,引用dojo.js,我給個例子吧:

其中第一段代碼的意思是表示異步執行,很重要,不能缺。不懂的話就别管他,記得加上就行,而且要放在加載dojo之前。(不然會出錯)

⑤調用這個封裝的類:

還記得上面自定義的路徑麼,參數就是路徑(myclass檔案夾,add.js檔案),然後在回調函數裡加上參數(指我們定義的這個類)。

通過第二行代碼,生成這個類的執行個體m;

第三行代碼,調用其方法add。

重新整理頁面,會在console控制台輸出6。

解釋:

①在目前檔案調用一個類,使用require;

在一個新的檔案聲明類,需要使用define。

二者差別在于,require是請求(請求一個聲明好的),define是定義(定義一個新的)。

我們在目前檔案調用類時,并不是我們自己聲明的(目前檔案聲明不需要使用require或者define),是以我們需要請求(這個請求是dojo幫我們完成的);

那麼我們需要自己定義一個類,用于給其他人請求時使用,那麼就必須用define。dojo在看到define的時候,就知道我們這裡是定義了一個類了。

②在自定義的add.js檔案的第二行代碼中,有一個return。

這裡的return,實時上是return的是一個函數(可以了解為上面所說的js的構造函數),這個構造函數裡有一些類方法和變量(當然我們這裡隻有一個add方法)。

return的這個函數跑哪裡去了呢?很簡單,就是我們調用它時,回調函數裡的那個參數。(注意,參數不需要和類名相同,因為調用時這個參數一般就不重要了——應該吧)。

因為有了這個參數,是以我們才能通過new myclass()來獲得這個類的執行個體。因為他實質上就像這樣

③我們可以在add.js裡,像我們正常使用dojo那樣,引用很多個插件,然後依次在回調函數裡給插件對應的參數。

然後聲明一些類方法,在類方法裡寫我們需要的功能(即API接口)。

也可以聲明一些變量,并在類方法中調用它。

也可以使用構造函數,做一些聲明該類執行個體時就做的事情。

還可以繼承(當然這裡就略了,下次說)

就像這樣:

方法很簡單,就不詳細解釋了。

然後調用它。

輸出結果是:

1

13

10

11

我們會發現:

①不同的執行個體,并不會共享類内的變量。

②類内聲明的變量,類外是無法直接通路的:

報錯,提示undefined

另外:

①假如在html檔案裡引用了jquery庫(或者其他庫),然後又在html裡引用了這個類,那麼是可以直接在add.js裡調用jquery的方法的(并不需要在add.js裡引用jquery庫);當然,如果html裡沒引用jquery庫的話,是會報錯的。

繼續閱讀