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

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

 2009-11-06 00:00:00 来源:WEB开发网   
核心提示: Dojo.declare: Dojo 中定义类的利器使用 Prototype based 的继承有几个缺点:prototype 只能设为某一个对象,而不能设为多个对象,掌握 Dojo 工具包,第 7 部分: Dojo 的扩展(3),所以不支持多重继承,prototype 中的属性为多个子对象共享

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)); 

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

Tags:掌握 Dojo 工具包

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