Задать вопрос
@lotrop

Где конкретно прочитать про правильную реализацию ООП на javascript?

Изучая книги по javascript наткнулся на разное трактование способов реализации ООП в данном языке. Одни говорят делай через прототипы, другие копируют свойства и функции, третьи вызывают родительский класс через Call у себя внутри конструктора. Как все таки правильно реализовывать?
Плюс вопрос про доступность методов и переменных, тоже много разночтений. Реализация скрытых методов и переменных тоже не всегда хороша, так как возвращая из объекта внутреннее приватное свойства, например массив, я уже снаружи могу менять значение массива (не понятно как бороться с передачей по ссылке, кроме как возврат копии).
Еще в книгах я так и не увидел толковой реализации архитектуры приложений. Где найти конкретную информацию по этим вопросам?
  • Вопрос задан
  • 632 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 4
evgeniy8705
@evgeniy8705
Повелитель вселенной
В ES5 так
// Создание супер класса
var SuperClass = function() {
	// Создание свойств супер класса
	this.prop = "property";
}

// Добавление методов в прототип супер класса
SuperClass.prototype.method = function() {
	return this.prop;
};

// Наследование
var SubClass = function() {
	// Наследование свойств супер класса
	SuperClass.apply(this, arguments);

	// создание собственных свойств
	this.prop = "property";
}

// Наследование методов супер класса
SubClass.prototype = Object.create(SuperClass.prototype);
// Возврат значения свойства constructor
SubClass.prototype.constructor = SubClass;

// Создание собственных методов
SubClass.prototype.subMethod = function() {
	console.log("yo!");
};

// Создания экземпляра класса
var instance = new SubClass();

// Вызов методов экземпляра
instance.subMethod();
console.log(instance.method());
console.log(instance.prop);
Ответ написан
Rema1ns
@Rema1ns
и так сойдет
Есть хорошая книга Javascript Шаблоны Стоян Стефанов. Редакция О'рейли.
Ответ написан
Одни говорят делай через прототипы, другие копируют свойства и функции, третьи вызывают родительский класс через Call у себя внутри конструктора. Как все таки правильно реализовывать?
Плюс вопрос про доступность методов и переменных, тоже много разночтений.

Сначала ES6, потом TypeScript. Если у вас встают такие вопросы, в "классическом" JS (ES5 и ниже) вы не найдете ответов. Например, посмотрите как компилит классы TS или Бабель.

В ES5 есть только две вещи, имеющие какое-то отношение к ООП - выстраивание объектов в цепочку прототипов и объект как словарь ключ-значение.
Ответ написан
Комментировать
sfi0zy
@sfi0zy Куратор тега JavaScript
Creative frontend developer
Как все таки правильно реализовывать?

es6-features.org/#ClassDefinition

Реализация скрытых методов и переменных тоже не всегда хороша

es6-features.org/#GetterSetter
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@flatogo
хорошые книги)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы