Множественное наследование в Prototypejs
Posted on Вторник, Декабрь 13th, 2011 at 9:03 ппНе буду подробно описывать что за фреймворк Prototypejs. Если будет интересно, загляните на официальный сайт. Мне же понадобилось реализовать множественное наследование. «Прямым», документированным способом, это сделать невозможно, поэтому привожу здесь пример небольшого обходного пути для реализации множественного наследования.
Mom = Class.create({
initialize : function() {
document.write("Мама: "+ this.cook());
this.momName = "Jeniffer";
},
cook : function() {
return "я умею готовить!";
}
});
// базовый класс Папа
Dad = Class.create({
initialize : function() {
document.write("Папа: " + this.shoot());
this.dadName = "John";
},
shoot : function() {
return "я умею стрелять!";
}
});
// наследник - Ребенок
Child = Class.create();
// унаследовать свойства и методы Мамы
Object.extend(Child.prototype, Mom.prototype);
// унаследовать свойства и методы Папы
Object.extend(Child.prototype, Dad.prototype);
// добавить собственную реализацию
Object.extend(Child.prototype, {
initialize : function() {
this.childName = "Jerry";
// вызвать конструктор базового класса Mom
var momConstructor = Mom.prototype.initialize.bind(this);
momCostructor();
// вызвать конструктор базового класса Dad
var dadCostructor = Dad.prototype.initialize.bind(this);
dadCostructor();
document.write("Ребенок: " + this.cook() + ' ' +
this.shoot() +
"Мою маму зовут: " + this.momName +
", моего папу зовут: " + this.dadName +
', а меня зовут: ' + this.childName);
}
});
var child = new Child();
Результат:
Мама: я умею готовить!
Папа: я умею стрелять!
Ребенок: я умею готовить! я умею стрелять! Мою маму зовут: Jeniffer, моего папу зовут: John, а меня зовут: Jerry
Напоследок хочу напомнить, чтобы вы были предельно осторожны с использованием множественного наследования. К примеру, важно следить, чтобы базовые классы не имели методов и свойств с одинаковыми именами.
Гради Буч. Объектно-ориентированный анализ и проектирование:
Множественное наследование прямо поддерживается в языках C++ и CLOS, а также, до некоторой степени, в Smalltalk. Необходимость множественного наследования в OOP остается предметом горячих споров. По нашему опыту, множественное наследование – как парашют: как правило, он не нужен, но, когда вдруг он понадобится, будет жаль, если его не окажется под рукой.