javascript中的继承
2009-09-10 00:00:00 来源:WEB开发网首先在js中的继承是Prototype-based 。不像一般的oo语言,比如java,c++是Class-based 的。
我们来比较一下这两种方式 :
1 在Class-based 中的类和实例是不同的实体,而在Prototype-based中所有对象都是实例。
2 在Class-based中定义一个类使用class关键字来定义。实例化一个对象,使用构造方法。而在Prototype-based,定义和创建一个对象都使用构造器函数。
3 在Class-based中构造一个继承,需要定义一个类,然后作为存在的类的子类。而在Prototype-based中,则是需要标记这个对象作为构造器函数的prototype 。
4 在Class-based中继承属性通过class chain。而在Prototype-based则是通过prototype chain。
下来我们来看一个我们需要实现的继承体系(后面有图):
Manager 和WorkerBee 继承Employee ,而SalesPerson 和Engineer继承WorkerBee.
其中,Employee有一个name 属性,Manager有一个reports 属性,SalesPerson 有一个quota 属性,Engineer有一个machine 属性。
function Employee () {
this.name = "";
this.dept = "general";
}
function Manager () {
this.reports = [];
}
Manager.prototype = new Employee;
function WorkerBee () {
this.projects = [];
}
WorkerBee.prototype = new Employee;
function SalesPerson () {
this.dept = "sales";
this.quota = 100;
}
SalesPerson.prototype = new WorkerBee;
function Engineer () {
this.dept = "engineering";
this.machine = "";
}
Engineer.prototype = new WorkerBee;