电脑技术学习

JavaScript面向对象技术实现树形控件

dn001

四、tree对象

下面是tree对象的构造函数:

function tree(){

this.branches = new Array();

this.add = addBranch;

this.write = writeTree;

}

tree对象代表着整个树形结构的根。tree()构造函数创建了branches数组,这个数组用来保存所有的子元素。add和write属性是指向两个多态性方法的指针,两个多态性方法的实现如下:

function addBranch(branch){

this.branches[this.branches.length] = branch;

}

function writeTree(){

var treeString = '';

var numBranches = this.branches.length;

for (var i=0;i treeString += this.branches[i].write();

document.write(treeString);

}

addBranch()方法把参数传入的对象加入到branches数组的末尾。writeTree()方法遍历保存在branches数组中的每一个对象,调用每一个对象的write()方法。注意这里利用了多态性的优点:不管branches数组的当前元素是什么类型的对象,我们只需按照统一的方式调用write()方法,实际执行的write()方法由branches数组当前元素的类型决定——可能是branch对象的write()方法,也可能是leaf对象的write()方法。

必须说明的是,虽然JavaScript的Array对象允许保存任何类型的数据,但这里我们只能保存实现了write()方法的对象。象Java这样的纯面向对象语言拥有强健的类型检查机制,能够自动报告类型错误;但JavaScript这方面的限制比较宽松,我们必须手工保证保存到branches数组的对象具有正确的类型。

标签: 控件