BUI基礎(chǔ)-類的創(chuàng)建和繼承

類的創(chuàng)建

BUI里的所有類的方法都在原型鏈上唬渗,這決定了創(chuàng)建類和繼承類的方式。關(guān)于類的定義和實(shí)例化請(qǐng)參看w3school的文章

下面是一個(gè)BUI中創(chuàng)建的最簡(jiǎn)單的類苦丁,其中的細(xì)節(jié)我們?cè)诒菊潞徒酉聛淼膸渍吕镌敿?xì)論述

<pre class="prettyprint linenums" style="padding: 8px; background-color: rgb(247, 247, 249); border: 1px solid rgb(225, 225, 232); margin-top: 8px; box-shadow: rgb(251, 251, 252) 40px 0px 0px inset, rgb(236, 236, 240) 41px 0px 0px inset; color: rgb(51, 51, 51); font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">

  1. <script>

  2. //創(chuàng)建類

  3. function NewClass(config){

  4. NewClass.superclass.constructor.call(this,config); //調(diào)用父類的構(gòu)造函數(shù)

  5. //ToDo Something

  6. }

  7. BUI.extend(NewClass,BUI.Base); //繼承BUI.Base類

  8. BUI.augment(NewClass,{ //在原型鏈上注冊(cè)方法

  9. m1 : function(){

  10. this.m2();

  11. this.m3();

  12. },

  13. m2 : function(){

  14. },

  15. m3 : function(){

  16. }

  17. });

  18. var a = new NewClass({a : '124'}); //實(shí)例化對(duì)象

  19. a.m1();

  20. </script>

</pre>

上面的內(nèi)容包含了以下信息:

  • 聲明一個(gè)類浸颓,在構(gòu)造函數(shù)中調(diào)用父類的構(gòu)造函數(shù)
  • superclass:指向父類
  • BUI.extend方法,實(shí)現(xiàn)了繼承,下面會(huì)詳細(xì)講解
  • BUI.augment : 將對(duì)象上的成員復(fù)制到類的原型鏈上产上,如上代碼參數(shù)2對(duì)象中的成員方法將會(huì)復(fù)制到NewClass的原型鏈上面去

類的繼承

BUI的類的繼承使用原型鏈的方式棵磷,提供了BUI.extend方法,具體的實(shí)現(xiàn)原理請(qǐng)參看:JS 繼承

我們通過下面的示例晋涣,來了解BUI.extend方法的使用

<pre class="prettyprint linenums" style="padding: 8px; background-color: rgb(247, 247, 249); border: 1px solid rgb(225, 225, 232); margin-top: 8px; box-shadow: rgb(251, 251, 252) 40px 0px 0px inset, rgb(236, 236, 240) 41px 0px 0px inset; color: rgb(51, 51, 51); font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">

  1. <script>

  2. //聲明類A

  3. function A(config){

  4. BUI.mix(this,config); //將配置信息附加到實(shí)例自身仪媒,后面講解BUI.Base后,就不再使用此方式

  5. }

  6. //聲明A的方法

  7. BUI.augment(A,{

  8. m1 : function(){

  9. console.log('a m1');

  10. },

  11. m2 : function(){

  12. console.log('a m2');

  13. }

  14. });

  15. //聲明B

  16. function B (config){

  17. B.superclass.constructor.call(this,config); //B 繼承A姻僧,調(diào)用A的構(gòu)造函數(shù)

  18. }

  19. BUI.extend(B,A); //B 繼承A

  20. BUI.augment(B,{ //實(shí)現(xiàn)B的方法

  21. m1 : function(){

  22. console.log('b m1');

  23. },

  24. m3 : function(){

  25. console.log('b m3');

  26. }

  27. });

  28. //聲明C

  29. function C (config){

  30. C.superclass.constructor.call(this,config);

  31. }

  32. BUI.extend(C,B); //C 繼承B

  33. BUI.augment(C,{

  34. m1 : function(){

  35. console.log('c m1');

  36. B.prototype.m1.call(this); //調(diào)用父類的m1方法

  37. //不要使用 C.superclass.m1.call(this);

  38. },

  39. m2 : function(){

  40. console.log('c m2');

  41. }

  42. });

  43. //實(shí)例化

  44. var c = new C({a : 'a',b : 'b'});

  45. c.m1(); //c m1 > b m1

  46. c.m2(); //c m2

  47. c.m3(); //b m3

  48. </script>

</pre>

解釋說明

  • BUI.mix : 把一個(gè)對(duì)象的成員復(fù)制到另一個(gè)對(duì)象
  • 構(gòu)造函數(shù)里面需要調(diào)用父類的構(gòu)造函數(shù)规丽,由于javascript缺少原生的支持,所以需要自己調(diào)用
  • 原型鏈上的方法會(huì)覆蓋撇贺,子類的方法覆蓋父類的方法
  • 調(diào)用父類的同名方法時(shí)赌莺,直接調(diào)用父類prototype上的方法,而不要通過superclass,在這篇文章里有論述

類的多繼承

javascript不支持多繼承松嘶,BUI.extend方法只能指定一個(gè)類作為superclass艘狭,所以為了實(shí)現(xiàn)多繼承我們引入了一個(gè)新的方法BUI.mixin,這個(gè)方法可以將多個(gè)類的原型鏈上的方法復(fù)制到需要繼承的類上

<pre class="prettyprint linenums" style="padding: 8px; background-color: rgb(247, 247, 249); border: 1px solid rgb(225, 225, 232); margin-top: 8px; box-shadow: rgb(251, 251, 252) 40px 0px 0px inset, rgb(236, 236, 240) 41px 0px 0px inset; color: rgb(51, 51, 51); font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">

  1. <script>

  2. //聲明類A

  3. function A(){

  4. }

  5. //聲明A的方法

  6. BUI.augment(A,{

  7. m1 : function(){

  8. console.log('a m1');

  9. },

  10. m2 : function(){

  11. console.log('a m2');

  12. }

  13. });

  14. //聲明B

  15. function B (){

  16. }

  17. BUI.augment(B,{ //實(shí)現(xiàn)B的方法

  18. m1 : function(){

  19. console.log('b m1');

  20. },

  21. m3 : function(){

  22. console.log('b m3');

  23. }

  24. });

  25. //聲明C

  26. function C (config){

  27. this.mix(this,config);

  28. }

  29. BUI.augment(C,{

  30. m1 : function(){

  31. console.log('c m1');

  32. },

  33. m2 : function(){

  34. console.log('c m2');

  35. }

  36. });

  37. function D (config){

  38. D.superclass.constructor.call(this,config);

  39. }

  40. BUI.extend(D,C);

  41. BUI.mixin(D,[A,B]);

  42. BUI.augment(D,{

  43. m2 : function(){

  44. console.log('d m2');

  45. },

  46. m3 : function(){

  47. console.log('d m3');

  48. }

  49. });

  50. //實(shí)例化

  51. var d = new D({a : 'a',b : 'b'});

  52. d.m1(); //b m1

  53. d.m2(); //d m2

  54. d.m3(); //d m3

  55. </script>

</pre>

我們把mixin的方式叫做擴(kuò)展,可以通過多個(gè)類擴(kuò)展自己的方法翠订,這里有擴(kuò)展的更加詳細(xì)的介紹

繼承的相關(guān)函數(shù)

上面的示例中用到了幾個(gè)繼承中常用的函數(shù):

  • BUI.extend(newclass,superclass): 實(shí)現(xiàn)類的繼承
  • BUI.augment(newclass,obj): 把對(duì)象的成員復(fù)制到類的原型鏈上
  • BUI.mix(obj1,obj2,...objn): 把后面對(duì)象的成員復(fù)制到第一個(gè)巢音,封裝 jQuery.extend 方法,將多個(gè)對(duì)象的屬性merge到第一個(gè)對(duì)象中
  • BUI.merge(obj1,obj2..objn): 把所有對(duì)象的成員復(fù)制到一個(gè)新的對(duì)象上尽超,不影響參數(shù)中的對(duì)象

上面方法詳細(xì)的API官撼,請(qǐng)查看BUI的工具方法

下一步學(xué)習(xí)

恭喜您,相信您已經(jīng)對(duì)BUI的類的創(chuàng)建和繼承有一定的了解了似谁,那么接下來需要了解的是配置和屬性傲绣、方法和事件,再去學(xué)習(xí)CMD組織模塊巩踏,然后進(jìn)入到BUI控件編寫的學(xué)習(xí)中秃诵。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市塞琼,隨后出現(xiàn)的幾起案子菠净,更是在濱河造成了極大的恐慌,老刑警劉巖彪杉,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毅往,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡在讶,警方通過查閱死者的電腦和手機(jī)煞抬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來构哺,“玉大人,你說我怎么就攤上這事∈锴浚” “怎么了残拐?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)碟嘴。 經(jīng)常有香客問我溪食,道長(zhǎng),這世上最難降的妖魔是什么娜扇? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任错沃,我火速辦了婚禮,結(jié)果婚禮上雀瓢,老公的妹妹穿的比我還像新娘枢析。我一直安慰自己,他們只是感情好刃麸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布醒叁。 她就那樣靜靜地躺著,像睡著了一般泊业。 火紅的嫁衣襯著肌膚如雪把沼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天吁伺,我揣著相機(jī)與錄音饮睬,去河邊找鬼。 笑死篮奄,一個(gè)胖子當(dāng)著我的面吹牛捆愁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宦搬,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼牙瓢,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了间校?” 一聲冷哼從身側(cè)響起矾克,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎憔足,沒想到半個(gè)月后胁附,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滓彰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年控妻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揭绑。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弓候,死狀恐怖郎哭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情菇存,我是刑警寧澤夸研,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站依鸥,受9級(jí)特大地震影響亥至,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贱迟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一姐扮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧衣吠,春花似錦茶敏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至袍榆,卻和暖如春胀屿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背包雀。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工宿崭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人才写。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓葡兑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親赞草。 傳聞我的和親對(duì)象是個(gè)殘疾皇子讹堤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容