dojo Quick Start/dojo入门手册--面向对象,定义Class
下一步我們看看dojo里如何定義Class:
| dojo.declare("Customer",null,{ var customer1 = new Customer("Mark"); |
declare有三個參數: 第一個 class名字;第二個 父類的引用 ;第三個 ...
構造函數的名字就叫做"construnctor" 再來看看如何繼承
| dojo.declare("VIP",Customer,{ ??? getDiscount:function(){ ??????? alert("Discount is 0.8"); ??? } }); var vip = new VIP("Mark"); vip.say(); vip.getDiscount(); |
使用this.inherited方法調用父類
| dojo.declare("VIP",Customer,{ ??? getDiscount:function(){ ??????? this.inherited(arguments); ??????? //this.inherited("getDiscount",arguments); ??? } }); |
關于構造函數
父類構造函數總是被自動調用的,所以看下面的例子:
| dojo.declare("Customer",null,{ dojo.declare("VIP",Customer,{ var vip = new VIP("123");//1 |
1將打印出兩條alert語句,先是父類的構造函數,再是子類的。 2將輸出"name: 123" "age: 123" 。個人認為,這個特性并不好,因為javascript這種弱類型的語言中,根本無法確定構造函數中的參數是傳遞給誰的,就比如上面的語句執行后,name="123",age="123",那哪個才是正確的?這個問題在使用dojo Grid的model里就很麻煩,定義一個model得這樣:new dojox.grid._data.Table(null,null,data);我要是想擴展這個Model,更麻煩,所有子類的構造函數都被父類給搞亂了。所以推薦的做法是使用關聯數組作為構造函數的參數,就像Python里的關鍵字參數。
| constructor:function(args){ ??? var args = args || {}; ??? this.name = args.name; ??? this.age = args.age; } |
多繼承,mixin
說到繼承,多繼承的問題又來了。dojo支持多繼承,準確地說,是mixin。還記得dojo.declare的第二個參數嗎,就是表示父類的那個參數,這個參數可以是一個數組,數組的第一個元素作為聲明的類的父類,其他的作為mixin。子類自動獲得父類和mixin的所有方法,后面的mixin的同名方法覆蓋前面的方法。
| dojo.declare("Customer",null,{ dojo.declare("MixinClass",null,{ |
其他的比較有用的函數就是dojo.mixin和dojo.extend了,顧名思義,一個是作用于對象實例,一個是用于擴展class,翻文檔和源碼吧。
總結
以上是生活随笔為你收集整理的dojo Quick Start/dojo入门手册--面向对象,定义Class的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 根据你所了解案例,谈谈对云南民俗风情旅游
- 下一篇: mootools 简介