как реализовать паразитический наследование, чтобы избежать гнездования
Я хотел бы следовать структуре наследования, показанной выше. Я хотел бы создать инженер, используя следующий синтаксис:
Для достижения этого синтаксиса, я должен создать вложенный объект следующего паразитарного шаблона наследования как так:
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);'? Это будет * значительно более стандартным, а также очень простым в реализации. –
*** вздох *** Еще один вопрос. –