【发布时间】:2014-12-16 03:00:11
【问题描述】:
上面的对象继承取自Mozilla's Tutorial。
当我们声明一个 Engineer 类型的新人时,它继承自 Employee 和 Workerbee,我们将其声明为:
var Mark = new Engineer()
但是,我有一些代码需要使用这种模式创建工程师:
var Mark = new Employee(id).WorkerBee(project).Engineer();
有人可以指点我一个例子来完成这项工作吗?下面是我的实现
function Employee(id) {
//variables
this.id = id
this.name = "";
this.dept = "general";
//methods
this.getId = function (){
return this.id
}
}
Employee.prototype.WorkerBee = WorkerBee;
Employee.prototype.Engineer = Engineer
function WorkerBee(project) {
//variables
this.projectName = project
this.projects = [];
//methods
this.getProjectName = function (){
return this.projectName
}
return this
}
WorkerBee.prototype.Engineer = Engineer
function Engineer() {
//variables
this.dept = "engineering";
this.machine = "";
//methods
this.getDept = function(){
return this.dept
}
return this
}
var Mark = new Employee("5").WorkerBee("Secret Project").Engineer();
console.log(Mark.getId()) //prints 5
console.log(Mark.getProjectName()) //prints Secret Project
console.log(Mark.getDept()) //prints engineering
【问题讨论】:
-
WorkerBee的原型依赖于Engineer,同样Engineer的原型依赖于WorkerBee? -
new Employee()返回一个普通对象,即 Employee 的一个实例。它没有 WorkerBee 方法。 -
“我需要使用这种模式创建工程师……”,为什么?
-
Pablo,看看组合继承。
-
@thefourtheye 这是一个错误,谢谢指出
标签: javascript inheritance design-patterns prototype