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

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

 2009-11-06 00:00:00 来源:WEB开发网   
核心提示: 在这个例子中声明了两个函数对象 Plane 和 JetPlane,Plane 对象的属性有在构造函数中定义的 weight, speed,掌握 Dojo 工具包,第 7 部分: Dojo 的扩展(2),也有在 Plane 的 prototype 对象中定义的 name,这些属性在使用的时候没有区

在这个例子中声明了两个函数对象 Plane 和 JetPlane,Plane 对象的属性有在构造函数中定义的 weight, speed,也有在 Plane 的 prototype 对象中定义的 name。这些属性在使用的时候没有区别,都可以通过【对象.属性】访问。JetPlane 中定义了两个属性 seats 和 construct,construct 的值是一个函数。JetPlane 的 prototype 对象增加了一个属性 erased,然后把 JetPlane 的 prototype 设为一个 Plane 对象,这样 JetPlane 就拥有了 Plane 的 prototype 对象(注意不是 Plane 对象)中所有的属性。随后的代码是使用 Plane 和 JetPlane 构造函数生成了一些对象,并输出对象的属性值。例子中的对象之间的关系如图 1 所示。


图 1. 对象图
掌握 Dojo 工具包,第 7 部分: Dojo 的扩展

绿颜色框表示的函数对象;蓝颜色框代表的是原型对象,每个函数对象都有一个原型对象,如 Plane 有 PlanPrototype,而 JetPlane 有 JetPlanePrototype。黄颜色框表示的普通对象。每个对象都有一个 Prototype 属性,指向一个原型对象。从图中可以看到各个对象的内部属性是如何分布的,Plane 对象中只有在自己的构造函数中定义的属性 weight,spead,name 存在于 Plane 的原型对象 PlanePrototype 中;p1 拷贝了 Plane 中的属性,而不会拷贝 PlanePrototype 中的属性。访 p1 的 name 属性时,JavaScript 解释器发现 p1 没有 name 属性,它会顺着 prototype 属性所指往上找,然后在 PlanePrototype 中发现了 name,所以实际上访问的是这里的 name。同理 j1 仅拷贝 JetPlane 中的 seats 和 construct,而 j1 的 prototype 有点特别;在语句 JetPlane.prototype = new Plane(); 执行之前,JetPlane 的 prototype 属性是指向 JetPlanePrototype 的,而当此语句执行之后,JetPlane 的 prototype 就被设为一个匿名的 Plane 对象,原来到 JetPlanePrototype 的链条被“剪断”了。访问 j1 的 weight 和 speed 时,实际上访问的是匿名 Plane 对象 [plane] 中的 weight 和 speed。简单的说,JavaScript 会在原型链上查找需要访问的属性,这就是 JavaScript 基于原型的继承的工作原理。

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

Tags:掌握 Dojo 工具包

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