dojo 三 类和继承 dojo/_base/declare


这里要讲有关类的定义、继承和实现。
官方教程:http://dojotoolkit.org/documentation/tutorials/1.7/declare/
类的声明是通过declare 这个方法来实现的。
define(['dojo/_base/declare'],function(declare){
//第一个declare,声明类my.A
  declare('my.A',null,{
        pp1 : 1,
        pp2 : 'b',
        dd : function(a1){
            alert(a1);
        }
    });
//第二个declare,声明类my.B,继承至my.A
    declare('my.B',my.A,{
        pp1 : 2,
        pp3 : 'c',
        dd : function(a1,a2){
            alert(a1 + a2);
        }
    });
//第三个declare,多父类继承
    declare('my.C',[my.A, my.B],{
        pp1 : 3,
        pp3 : 'd'
        dd : function(a1,a2,a3){
            alert(a1 + a2 + a3);
        }
    });
});

以上代码为superClass.js文件的全部内容。
这里又见到了define 这个方法。
声明类需要declare 这个方法,define 通过引用 dojo/_base/declare 来引入。
declare 包含三个参数,第一个为所声明的类的名称,可忽略,当用于Dojo的parser时则必要;
第二个为父类,如果没有则为null;第三个就是类体,包括属性和方法。
在第一个declare 中,my.A 为声明的类的全名,my 为命名空间名,A为类名。
null表示它没有父类。
pp1为整型属性,pp2为字符型属性,dd为方法,它们都包含于一组{}内作为类的实体内容。
在html中对类my.A的实现和使用

require(['superClass'], function(){
        var mm = new my.A();//实现
        mm.dd(mm.pp2);//alert pp2的内容为'b'
        mm.pp2 = 'bbbb';//设置pp2的值
        mm.dd(mm.pp2);//alert pp2的内容为‘bbbb’
    });

在第二个declare中,类名为my.B,my.A作为父类,在类体中将pp1的默认值设为2,新增属性pp3,并重写了方法dd。
在html中对类my.B的实现和使用

require(['superClass'], function(){
        var mm1 = new my.B();//实现
        mm1.dd(mm1.pp1, mm1.pp2);//'2b'
        mm1.pp2 = 'ab';//设置pp2的值
        mm1.dd(mm1.pp2, mm1.pp3);//'abc'
    });

在第三个declare中,类名为my.C,继承了多个父类my.A和my.B,重置了pp1和pp3的默认值,并重写了方法dd。
多个父类的继续是父类们放在一个数组中为参数传入。
在html中对类my.C的实现和使用

require(['superClass'], function(){
        var mm2 = new my.C();//实现
        mm2.dd(mm2.pp1, mm2.pp2, mm2.pp3);//'3bd'
        mm2.pp2 = 'ab';//设置pp2的值
        mm2.dd(mm2.pp1, mm2.pp2, mm1.pp3);//'3abd'
    });

posted @ 2013-11-09 17:54  JackGIS  阅读(625)  评论(0编辑  收藏  举报