Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ООП - перебор объектов и применение к ним метода (https://javascript.ru/forum/misc/71032-oop-perebor-obektov-i-primenenie-k-nim-metoda.html)

ruslan_mart 21.10.2017 00:28

Объявлять метод внутри конструктора - плохая практика.

function Car() {
	//...
}

Car.prototype.honk = function() {
	console.log('Би-бип');
};

var myCars = [];

for (var i = 0; i < 10; i++) {
	myCars.push(new Car);
}


myCars.forEach(function(car) {
	car.honk();
});

Vlasenko Fedor 21.10.2017 01:02

Цитата:

Сообщение от Alexandroppolus
в прототипы стандартных объектов можно добавлять только полифилы.

Плевать на это дело.
Когда то писали что стили надо в header только подключать
Теперь фреймворки их налету подгружают динамически
Если есть возможность расширить стандартный прототип и это не отразится в дальнейшем, то все ваши стереотипы в задницу
И не надо говорить, что это вчерашний день, про решения которые работают и успешно справляются с своими задачами

Alexandroppolus 21.10.2017 03:57

Цитата:

Сообщение от Poznakomlus
Когда то писали что стили надо в header только подключать
Теперь фреймворки их налету подгружают динамически

Ну и что? Добавляют ведь всё равно в head.

Цитата:

Сообщение от Poznakomlus
Если есть возможность расширить стандартный прототип и это не отразится в дальнейшем

А если отразится? Тогда что?
Прототип стандартного объекта - это глобальная область, такая же как window. Думаю, не надо объяснять, почему не следует раскидывать по глобальной области своё барахлишко. К тому же с каждым новым стандартом es в этих прототипах куча всего добавляется.

Vlasenko Fedor 21.10.2017 13:34

Цитата:

Сообщение от Alexandroppolus
Добавляют ведь всё равно в head.

нет разницы, можете в body вставлять, динамически включенные скрипты подгружаются асинхронно без блокировки основного потока

Цитата:

Сообщение от Alexandroppolus
А если отразится

Значит вы не контролируете процесс
И если говнокодите, то разницы нет с глобал или без
С ним также стоит уметь работать для этого есть и модули и неймспейсы которые экспортируют в него же.
Небольшой пример с forEach, 2 строки :lol:
<div></div>
<div></div>
<div></div>
<script>
HTMLCollection.prototype.forEach = NodeList.prototype.forEach = Array.prototype.forEach;
document.querySelectorAll('div').forEach((el, i) => el.insertAdjacentHTML('afterbegin', ++i));
</script>

Alexandroppolus 21.10.2017 20:41

Цитата:

Сообщение от Poznakomlus
нет разницы, можете в body вставлять, динамически включенные скрипты подгружаются асинхронно без блокировки основного потока

так скрипты или стили? стили раньше можно было только в head втыкать, иначе они не подхватывались. А скрипты всегда работали и в боди.

Цитата:

Сообщение от Poznakomlus
Небольшой пример с forEach, 2 строк

пример, безусловно, интересный. Только бесполезный. В NodeList.prototype и так есть forEach. В старых браузерах нет, вот и получается полифил.
В следующий раз, замышляя потрясти оппонента эффектным примером, извольте для начала в справочник заглянуть. :) А то ведь может оказаться, что метод с таким названием в прототипе уже есть, только работает чуть по другому )

Vlasenko Fedor 22.10.2017 01:39

Цитата:

Сообщение от Alexandroppolus
В старых браузерах нет

нет его реализация не во всех браузерах до сих пор
https://developer.mozilla.org/en-US/...deList/forEach
Цитата:

Сообщение от Alexandroppolus
отрясти оппонента эффектным примером

под столом катаюсь:lol: , написал, что попалось под руку
Цитата:

Сообщение от Alexandroppolus (Сообщение 467919)
А то ведь может оказаться, что метод с таким названием в прототипе уже есть, только работает чуть по другому )

Кто первый того и тапочки, если мне нужна реализация и она работает

ruslan_mart 22.10.2017 01:51

Не вижу ничего плохого в расширении прототипов. Сам так делаю и не парюсь, зато удобно. А если опасаетесь, что в будущем могут быть какие-то проблемы из-за того, что названия новых методов будут совпадать с вашими, то никто Вам не мешает называть свои методы с каким-нибудь префиксом (типа $forEach, _forEach, flyForEach), так как вряд ли методы нативной реализации будут с подобными префиксами.


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