掌握 Dojo 工具包,第 7 部分: Dojo 的扩展
2009-11-06 00:00:00 来源:WEB开发网Dojo.declare: Dojo 中定义类的利器
使用 Prototype based 的继承有几个缺点:
prototype 只能设为某一个对象,而不能设为多个对象,所以不支持多重继承。
prototype 中的属性为多个子对象共享,如果某个子对象修改了 prototype 中的某一属性值,则其他的子对象都会受影响,所谓牵一发而动全身。
prototype 的设置只能发生在两个对象都构造完之后,这会造成在子对象的构造函数中无法修改父对象的属性,而在 class based 的继承中,子类对象在自己的构造函数中可以调用父对象的构造函数。所以在清单 1 中又定义了一个 construct 方法来完成属性的初始化,
为了解决上述问题,Dojo 对 JavaScript 已有的 prototype based 的继承机制进行了包装,使其更容易理解,使用。在 Dojo 中可以使用 Dojo.declare 函数来定义普通类,单继承的类,甚至是多重继承的类(虽然笔者认为 dojo.declare 定义的只是对象,在 Dojo 的官方文档中把 Dojo.declare 定义为声明为类的函数,所以这里也采用这一定义),一切都在 Dojo.declare 中。同样我们通过一个例子来说 dojo.declare 是如何工作的。
清单 2 dojo.declare
dojo.declare("Plane", null, {
name:"",
constructor:function(n, w, s) {
this.name = n;
this.weight = w;
this.speed = s;
}
});
dojo.declare("JetPlane", Plane, {
constructor:function(name, weight, speed, seats) {
this.seats = seats;
}
}) ;
dojo.declare("Helicopter", Plane, {
propellers : 0,
constructor : function (name, weight, speed, placeholder, propellers ) {
this.propellers = propellers;
}
});
dojo.declare("Jetocopter", [JetPlane, Helicopter], {
constructor : function(name, weight, speed, seats, propellers) {
this.lifelong = 10;
}
});
var p1 = new Plane("Boeing", 2000, 100);
var j1 = new JetPlane("F-22", 500, 500,2);
var h1 = new Helicopter("Apache", 200, 200, 0, 3);
var jh1 = new Jetocopter("X2", 200, 400, 3, 4);
//output every property value pair of obj
function output(obj) {
var message = "";
for (var p in obj){
if (p[0] != '_' && p!="inherited" && p!="constructor"
&&p!="preamble" && p != "declaredClass")
message += p + ":" + obj[p] + ", ";
}
console.log(message);
}
output(p1);output(j1);output(h1);output(jh1);
console.log("jh1 is instance of JetPlane: " + (jh1 instanceof JetPlane));
console.log("jh1 is instance of Helicopter: " + (jh1 instanceof Helicopter));
- ››Dojo QuickStart 快速入门教程 (4) 简单的测试框架...
- ››Dojo QuickStart 快速入门教程 (5) 使用数组
- ››Dojo QuickStart Guide 快速入门 Why Dojo
- ››Dojo Quick Start Guide 快速入门 (2) 基本框架
- ››Dojo QuickStart 快速入门教程 (3) 选择器
- ››Dojo Javascript 编程规范 [1]
- ››Dojo Javascript 编程规范 [2]
- ››Dojo Javascript 编程规范 [3]
- ››Dojo Javascript 编程规范 [4]
- ››Dojo Javascript 编程规范 [5]
- ››Dojo学习笔记(7. dojo.dom)
- ››Dojo学习笔记(8. dojo.event & dojo.event.to...
更多精彩
赞助商链接