ООП - перебор объектов и применение к ним метода
Всем привет! Как создать много объектов, к примеру 10 000. Написал так:
function Car() { var newCar = {} this.honk = function() { document.write("Би-бип"); } return this; } myCar= []; myCar[]= new Car(); myCar[0].honk(); Второй вопрос как применить к массиву объектов метод? Возможно я не правильно полностью написал код, как правильно? Вообще мне нужно сделать известную игру "шарики" и Car() просто для примера. На ООП хочу реализовать вывод клеток, каждая клетка объект, вопрос как объявить столько объектов? Мое решение: for (...) myCar[i]= new Car(); Дальше возникла проблема с вызывом метода отрисовки клетки. |
wadim, Создать 10к экземпляров объекта можно в цикле, либо вручную.
Вызвать метод "honk" всех объектов массива myCar сразу нельзя, нужно пробежаться по элементам массива в цикле и вызвать для каждого объекта массива этот метод. PS. Можно расширить прототипа объекта Array, добавив в него новый метод, который будет это реализовывать. |
Nexus напишите пожалуйста как? 10к создаю: for (...) myCar[i]= new Car(); Правильно? Я даже к одному объекту обратится не могу: myCar[0].honk();
Не работает! |
Как это не работает?
<script> function Car() { var newCar = {} this.honk = function() { document.write("Би-бип<br>"); } return this; } myCar= []; for (var i = 0; i<10; i++) { myCar[i]= new Car(); } myCar[0].honk(); myCar[9].honk(); myCar.bang = function() { document.write("Ба-бах<br>");} myCar.bang(); </script> |
Dilettante_Pro спасибо. Странно что не работает: myCar[]= new Car(); Почему? Тот код, что написал Dilettante_Pro, мне просто пришел на ум, в интернете не нашел подобное. Вопрос, правильно ли я понимаю ООП? Правильно ли такое решение(код реализованный Dilettante_Pro)? Ну и наконец, подходит ли для решения моей задачи - игры "Шарики"?
|
wadim,
Что такое myCar[] ? Массив? Элемент массива? |
Цитата:
в прототипы стандартных объектов можно добавлять только полифилы. |
Цитата:
Я думаю тс так делать не станет, это будет банально неудобно. Если нужно сделать подобное, то лучше реализовать новый класс, который будет наследовать прототип от Array. |
myCar[]=1; - это я думаю не будет работать на js, а так $myCar[]=1; - на php без проблем.
|
wadim,
$myCar[]=1;//PHP== myCar.push(1);//JS |
Объявлять метод внутри конструктора - плохая практика.
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(); }); |
Цитата:
Когда то писали что стили надо в header только подключать Теперь фреймворки их налету подгружают динамически Если есть возможность расширить стандартный прототип и это не отразится в дальнейшем, то все ваши стереотипы в задницу И не надо говорить, что это вчерашний день, про решения которые работают и успешно справляются с своими задачами |
Цитата:
Цитата:
Прототип стандартного объекта - это глобальная область, такая же как window. Думаю, не надо объяснять, почему не следует раскидывать по глобальной области своё барахлишко. К тому же с каждым новым стандартом es в этих прототипах куча всего добавляется. |
Цитата:
Цитата:
И если говнокодите, то разницы нет с глобал или без С ним также стоит уметь работать для этого есть и модули и неймспейсы которые экспортируют в него же. Небольшой пример с 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> |
Цитата:
Цитата:
В следующий раз, замышляя потрясти оппонента эффектным примером, извольте для начала в справочник заглянуть. :) А то ведь может оказаться, что метод с таким названием в прототипе уже есть, только работает чуть по другому ) |
Цитата:
https://developer.mozilla.org/en-US/...deList/forEach Цитата:
Цитата:
|
Не вижу ничего плохого в расширении прототипов. Сам так делаю и не парюсь, зато удобно. А если опасаетесь, что в будущем могут быть какие-то проблемы из-за того, что названия новых методов будут совпадать с вашими, то никто Вам не мешает называть свои методы с каким-нибудь префиксом (типа $forEach, _forEach, flyForEach), так как вряд ли методы нативной реализации будут с подобными префиксами.
|
Часовой пояс GMT +3, время: 19:51. |