WEB开发网
开发学院软件开发Java 掌握 Dojo 工具包,第 7 部分: Dojo 的扩展 阅读

掌握 Dojo 工具包,第 7 部分: Dojo 的扩展

 2009-11-06 00:00:00 来源:WEB开发网   
核心提示: 这个例子与清单 1 中例子相似,但是使用了 dojo.declare 来定义类,掌握 Dojo 工具包,第 7 部分: Dojo 的扩展(4),JetPlane 和 Helicopter 继承自 Plane,而 Jetocopter 继承自 JetPlane 和 Helicopter,过程稍微复

这个例子与清单 1 中例子相似,但是使用了 dojo.declare 来定义类。JetPlane 和 Helicopter 继承自 Plane,而 Jetocopter 继承自 JetPlane 和 Helicopter。从这四个类的定义代码不难看出 dojo.declare 函数的一共有三个参数:

className:自定义类的类名

superClass:父类,可以为空,某一个类(单一继承),或者是一个对象数组(多重继承)。

hash props:类定义代码,比如类有那些属性,方法等。其中名为 constructor 的属性比较特殊,它是类的构造函数,每次创建一个新的对象时,它都会被调用。

这段代码的输出如下:

name:Boeing, weight:2000, speed:100,

name:F-22, weight:500, speed:500, seats:2,

name:Apache, weight:200, speed:200, propellers:3,

name:X2, weight:200, speed:400, seats:3,propellers:4, lifelong:10,

jh1 is instance of JetPlane: true

jh1 is instance of Helicopter: false

使用 Dojo.declare 可以非常简单高效的定义各种想要的类,再也不用为没有地方初始化父类属性而发愁,类定义代码具有很好的可读性,类之间的继承关系一望便知,而且继承关系在声明时就可以确定的,而不是等到类构造完之后再去指定。究竟 Dojo.declare 是如何实现的,使得能有这么多优点?

Dojo.declare 完成的工作是根据它的参数情况构造出一个构造函数对象,并把这个对象作为 JavaScript Global 对象的一个属性,这样就可以在 JavaScript 代码中调用这个对象。以清单 2 中的 Plane 定义为例,它和清单 1 中 Plane 的定义代码是等价的;这种情况下,dojo.declare 做的就是根据第三个参数 hash props 构造出一个临时构造函数,它的内容和清单 1 中的 Plane 一样。过程大致为首先把 hash props 中的 constructor 函数定义的属性拷贝到临时构造函数中,然后把 hash props 中的其他属性拷贝到临时构造函数的原型对象中去,最后在 Global 对象中增加一个属性 className,值为这个临时构造函数。如果是单一继承或者多重继承,过程稍微复杂一点,因为要维护继承关系。在后续文章中会有更详细的介绍。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:掌握 Dojo 工具包

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接