Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.11.2014, 16:02
Кандидат Javascript-наук
Отправить личное сообщение для riva Посмотреть профиль Найти все сообщения от riva
 
Регистрация: 24.06.2013
Сообщений: 115

Элегантное решение с 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 ) );
Ответить с цитированием
  #2 (permalink)  
Старый 04.11.2014, 16:05
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

http://www.2ality.com/2012/07/esnext-classes.html
__________________
kobezzza
code monkey
Ответить с цитированием
  #3 (permalink)  
Старый 04.11.2014, 16:11
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

ТС, init'ы признак отсутствия кложей (closures). Так вроде давно уже не делают.
Ответить с цитированием
  #4 (permalink)  
Старый 04.11.2014, 16:13
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

kobezzza,
Цитата:
на js 5
Думаю он подразумевает ES5.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 04.11.2014, 16:18
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от Aetae Посмотреть сообщение
kobezzza, Думаю он подразумевает ES5.
https://github.com/termi/es6-transpiler
__________________
kobezzza
code monkey
Ответить с цитированием
  #6 (permalink)  
Старый 04.11.2014, 17:34
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

kobezzza,
Цитата:
http://www.2ality.com/2012/07/esnext-classes.html
Одной ссылкой уничтожил часовую/дневную работу чувака ;(
Ответить с цитированием
  #7 (permalink)  
Старый 04.11.2014, 17:45
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от Safort Посмотреть сообщение
kobezzza,

Одной ссылкой уничтожил часовую/дневную работу чувака ;(
__________________
kobezzza
code monkey
Ответить с цитированием
  #8 (permalink)  
Старый 04.11.2014, 18:33
Кандидат Javascript-наук
Отправить личное сообщение для riva Посмотреть профиль Найти все сообщения от riva
 
Регистрация: 24.06.2013
Сообщений: 115

Цитата:
Нормальные люди рождаются от 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 + ")";
    };

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

Последний раз редактировалось riva, 04.11.2014 в 18:37.
Ответить с цитированием
  #9 (permalink)  
Старый 04.11.2014, 23:27
Аспирант
Отправить личное сообщение для Voronar Посмотреть профиль Найти все сообщения от Voronar
 
Регистрация: 15.02.2013
Сообщений: 55

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


В чём её преимущество перед стандартным способом создания объектов с помощью функции-конструктора?
Ответить с цитированием
  #10 (permalink)  
Старый 04.11.2014, 23:32
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Появление/исчезновение дива при клике на ссылку nickostyle jQuery 5 18.01.2016 03:03
Решение проблемы с ссылками на объект в прототипе при создании нового объекта riva Общие вопросы Javascript 2 04.11.2014 00:00
Мерцание блоков при при скрытии vovammm Общие вопросы Javascript 4 04.05.2014 10:50
getAllResponseHeaders() и status имеют смысл только при readyState==4? mister_maxim AJAX и COMET 7 27.03.2011 19:08
Изменение стиля родительского элемента при :hover дочернего lanzs Элементы интерфейса 2 16.10.2010 13:28