【发布时间】:2014-12-16 10:30:54
【问题描述】:
我想遵循上面显示的继承结构。我想使用以下语法创建工程师:
var Mark = new Employee(id).WorkerBee(project).Engineer();
为了实现这种语法,我必须按照这样的寄生继承模式创建一个嵌套对象:
function Employee(id) {
this.id = id;
this.WorkerBee = function(project) {
this.project = project;
this.Engineer = function() {
...
return this;
};
return this;
};
}
为了避免深层嵌套,我尝试使用原型重写它。如何重写我的代码以实现与上述相同的目标?
function Employee(id) {
//variables
this.id = id
this.name = "";
this.dept = "general";
//methods
this.getId = function() {
return this.id
}
}
Employee.prototype.WorkerBee = WorkerBee;
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()) //should print "5"
console.log(Mark.getProjectName()) //should print "Secret Project"
console.log(Mark.getDept()) //should print engineering
【问题讨论】:
-
" 我必须按照这样的寄生继承模式创建一个嵌套对象" 不一定,可以肯定有更简单的方法。您是否一定想使用构造函数来创建对象,或者您对更直接的原型继承形式感到满意?
-
“我想使用以下语法创建工程师:
var Mark = new Employee(id).WorkerBee(project).Engineer();” 为什么? 这非常令人费解。为什么不:var Mark = new Engineer(id, project);?这会显着地更标准,也很容易实现。 -
sigh 又是一问一答。
-
@T.J.Crowder 嘿 TJ。我知道 Mark = new Engineer() 是创建它的标准方法,但是我只是将这个示例用作类比。我有一些代码需要以 Mark = new Employee().WorkerBee().Engineer() 的模式执行
-
@Paolo:标准继承就是所有需要的。您可以拥有任意多个级别。
标签: javascript inheritance design-patterns prototype