Элегантное решение с super при наследовании
function Super( args ){
this.init( args );
}
Super.prototype = {
constructor: Super,
init: function( args ){
this.name = args.name;
}
};
Расширяю его -
var Child = ( function( SUPER ){
function Child( args ){
SUPER.call( this, args );
// Child.super.init.call( this, args ); //
// сделать так, как мне кажется, не совсем правильно
// так как потомку приходится хранить логику инициализации
// своего супер объекта.
//
// Вопрос - как наиболее элегантно можно выйти из
// сложившейся затруднительной ситуации, на js 5
}
Child.prototype = Object.create( SUPER.prototype );
Child.prototype.constructor = Child;
Child.super = SUPER.prototype;
Child.prototype.init = function( args ){
this.color = args.color;
};
return Child
}( Super ) );
|
|
Нормальные люди рождаются от parent'a, а у екмы6 - от super'a.
ТС, init'ы признак отсутствия кложей (closures). Так вроде давно уже не делают. |
kobezzza,
Цитата:
|
Цитата:
|
kobezzza,
Одной ссылкой уничтожил часовую/дневную работу чувака ;( |
Цитата:
:D |
Цитата:
class A{
this.b = new B( );
}
А это секс.
class B extends A{
}
Да и то parent и child, это наверное в js и нет. Цитата:
Не смотря на то, что я зарегин год назад, учу всего пару недель и мне пока ещё сложно. Цитата:
Но видно я первый раз сказал невнятно, по этому повторю - если отталкиваться от первой ссылки, то получается, что потомок вызывая метод супер класса должен обладать лишней и ни к чему не нужной логикой расширяемого класса.
Employee.prototype.describe = function () {
return Person.prototype.describe.call(this)
+ " (" + this.title + ")";
};
Но раз даже в статье показывают, что это нормально, то наверное другого, более изящного способа нет. Нет ведь? |
Всем привет.
Кстати, часто встречаю вот такую нотацию для создания объектов:
var obj = ( function()
{
return obj;
}() );
В чём её преимущество перед стандартным способом создания объектов с помощью функции-конструктора? |
Voronar,
в учебнике на этом сайте довольно подробно всё описано. |
| Часовой пояс GMT +3, время: 00:58. |