Элегантное решение с 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,
в учебнике на этом сайте довольно подробно всё описано. |
Voronar, преимущества в самовызывающимся замыкании, которое создает сокрытую область видимости. Ведь возвращать можно не только объект созданный замыканием, но и объект созданный в этом замыкании.
|
Aetae: "Подвох тут в том, что "приватные" функции вообще никаким образом не будут доступны извне, т.е. в таком случае уже не получится впоследствии расширить "класс", ибо новые методы никак не смогут получить доступ к изначальной области видимости."
Источник. |
Voronar, какой же это подвох? Если бы к ним могли получить доступ наследники, то это был бы protected, а не private.
|
Так не только наследники но и он сам, сели вы захотите добавить внезапно какой ещё публичный метод.(А такое часто бывает в случае модульности)
|
Часовой пояс GMT +3, время: 01:27. |