Элегантное решение с 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,
Одной ссылкой уничтожил часовую/дневную работу чувака ;( |
Цитата:
![]() |
Цитата:
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, время: 11:22. |