Реализация наследования на JavaScript-е 
Автор: Evgeny Sergeev
Широко известный факт, что в JS нет классов, а значит нет наследования. Поэтому приходится придумывать разные трюки. Например такой:
1. Создаем дополнительную функцию
function implements(target, parentClass)
{
if(undefined == target.Parent)
target.Parent = [];
for(var i in parentClass){
if(target[i] == undefined){
target[i] = parentClass[i];
}else{
// Если функция создана в классе-потомке то располагаем ее в Parent
// предварительно проверяем наличие в Parent таких же функций от других
// классов-родителей.
if(undefined == target.Parent[i]){
target.Parent[i] = parentClass[i];
}else{
alert(’Ошибка: Конфликт разрешения имен. Метод или свойство: ‘+i+’ уже существует!’);
return;
}
}
}
}
{
if(undefined == target.Parent)
target.Parent = [];
for(var i in parentClass){
if(target[i] == undefined){
target[i] = parentClass[i];
}else{
// Если функция создана в классе-потомке то располагаем ее в Parent
// предварительно проверяем наличие в Parent таких же функций от других
// классов-родителей.
if(undefined == target.Parent[i]){
target.Parent[i] = parentClass[i];
}else{
alert(’Ошибка: Конфликт разрешения имен. Метод или свойство: ‘+i+’ уже существует!’);
return;
}
}
}
}
2. Класс создаем так:
function SomeClass(){}
SomeClass.prototype = {
method_1: function(){alert(’Run method 1′);}
}
SomeClass.prototype = {
method_1: function(){alert(’Run method 1′);}
}
3. Наследование делаем так:
function AnotherClass(){
implements(this, SomeClass);
}
AnotherClass.prototype = {
method_2: function(){alert(’Run method 2′);}
}
var v = new AnotherClass();
v.method_1();
v.method_2();
Недостаток заключается в том, что не наследуются конструкторы. А в остальном все очень удобно!
подписаться на блог
Павел
Гость
искусственная какая-то конструкция
и для скриптов разве нужны такие навороты?
Leave a Reply