Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Элегантное решение с super при наследовании (https://javascript.ru/forum/misc/51363-ehlegantnoe-reshenie-s-super-pri-nasledovanii.html)

riva 04.11.2014 16:02

Элегантное решение с 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 ) );

kobezzza 04.11.2014 16:05

http://www.2ality.com/2012/07/esnext-classes.html

kostyanet 04.11.2014 16:11

Нормальные люди рождаются от parent'a, а у екмы6 - от super'a.

ТС, init'ы признак отсутствия кложей (closures). Так вроде давно уже не делают.

Aetae 04.11.2014 16:13

kobezzza,
Цитата:

на js 5
Думаю он подразумевает ES5. :)

kobezzza 04.11.2014 16:18

Цитата:

Сообщение от Aetae (Сообщение 338998)
kobezzza, Думаю он подразумевает ES5. :)

https://github.com/termi/es6-transpiler :)

Safort 04.11.2014 17:34

kobezzza,
Одной ссылкой уничтожил часовую/дневную работу чувака ;(

kobezzza 04.11.2014 17:45

Цитата:

Сообщение от Safort (Сообщение 339012)
kobezzza,

Одной ссылкой уничтожил часовую/дневную работу чувака ;(

:D

riva 04.11.2014 18:33

Цитата:

Нормальные люди рождаются от parent'a, а у екмы6 - от super'a.
Вы наверное ещё юноша и не понимаете разницы. Это рожает -
class A{
	this.b = new B( ); 
}

А это секс.
class B extends A{
	
}

Да и то parent и child, это наверное в js и нет.
Цитата:

ТС, init'ы признак отсутствия кложей (closures). Так вроде давно уже не делают.
А как должно быть, минимальный пример можно?
Не смотря на то, что я зарегин год назад, учу всего пару недель
и мне пока ещё сложно.
Цитата:

Одной ссылкой уничтожил часовую/дневную работу чувака ;(
Чувак как бы об этом уже знал и в коде показал, как мне кажется, тоже самое.
Но видно я первый раз сказал невнятно, по этому повторю - если отталкиваться
от первой ссылки, то получается, что потомок вызывая метод супер класса должен обладать лишней и ни к чему не нужной логикой расширяемого класса.
Employee.prototype.describe = function () {
        return Person.prototype.describe.call(this)
               + " (" + this.title + ")";
    };

Но раз даже в статье показывают, что это нормально, то наверное другого,
более изящного способа нет. Нет ведь?

Voronar 04.11.2014 23:27

Всем привет.
Кстати, часто встречаю вот такую нотацию для создания объектов:
var obj = ( function()
{
  return obj;
}() );


В чём её преимущество перед стандартным способом создания объектов с помощью функции-конструктора?

Safort 04.11.2014 23:32

Voronar,
в учебнике на этом сайте довольно подробно всё описано.


Часовой пояс GMT +3, время: 11:22.