日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dojo Quick Start/dojo入门手册--面向对象,定义Class

發布時間:2024/9/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dojo Quick Start/dojo入门手册--面向对象,定义Class 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下一步我們看看dojo里如何定義Class:

dojo.declare("Customer",null,{
??? constructor:function(name){
??????? this.name = name;
??? },
??? say:function(){
??????? alert("Hello " + this.name);
??? },
??? getDiscount:function(){
??????? alert("Discount is 1.0");
??? }
});

var customer1 = new Customer("Mark");
customer1.say();

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,{
??? constructor:function(name){
??????? this.name = name;
??????? alert("base class");
??? },
??? say:function(){
??????? alert(this.name);
??? }
});

dojo.declare("VIP",Customer,{
??? constructor:function(age){
??????? this.age = age;
??????? alert("child class");
??? },
??? say:function(){
??????? alert("name:" + this.name);
??????? alert("age:" + this.age);
??? }
});

var vip = new VIP("123");//1
vip.say();//2

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,{
??? say:function(){
??????? alert("Hello Customer");
??? },
??? getDiscount:function(){
??????? alert("Discount in Customer");
??? }
});

dojo.declare("MixinClass",null,{
??? say:function(){
??????? alert("Hello mixin");
??? },
??? foo:function(){
??????? alert("foo in MixinClass");
??? }
});
dojo.declare("VIP",[Customer,MixinClass],{
});
var vip = new VIP();
vip.getDiscount();
vip.foo();
vip.say();//輸出"Hello MixinClass"

其他的比較有用的函數就是dojo.mixin和dojo.extend了,顧名思義,一個是作用于對象實例,一個是用于擴展class,翻文檔和源碼吧。

總結

以上是生活随笔為你收集整理的dojo Quick Start/dojo入门手册--面向对象,定义Class的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。