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)

wadim 20.10.2017 15:07

ООП - перебор объектов и применение к ним метода
 
Всем привет! Как создать много объектов, к примеру 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();
Дальше возникла проблема с вызывом метода отрисовки клетки.

Nexus 20.10.2017 15:18

wadim, Создать 10к экземпляров объекта можно в цикле, либо вручную.
Вызвать метод "honk" всех объектов массива myCar сразу нельзя, нужно пробежаться по элементам массива в цикле и вызвать для каждого объекта массива этот метод.

PS. Можно расширить прототипа объекта Array, добавив в него новый метод, который будет это реализовывать.

wadim 20.10.2017 15:24

Nexus напишите пожалуйста как? 10к создаю: for (...) myCar[i]= new Car(); Правильно? Я даже к одному объекту обратится не могу: myCar[0].honk();
Не работает!

Dilettante_Pro 20.10.2017 15:35

Как это не работает?
<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>

wadim 20.10.2017 15:51

Dilettante_Pro спасибо. Странно что не работает: myCar[]= new Car(); Почему? Тот код, что написал Dilettante_Pro, мне просто пришел на ум, в интернете не нашел подобное. Вопрос, правильно ли я понимаю ООП? Правильно ли такое решение(код реализованный Dilettante_Pro)? Ну и наконец, подходит ли для решения моей задачи - игры "Шарики"?

Dilettante_Pro 20.10.2017 16:04

wadim,
Что такое myCar[] ? Массив? Элемент массива?

Alexandroppolus 20.10.2017 16:08

Цитата:

Сообщение от Nexus
Можно расширить прототипа объекта Array, добавив в него новый метод

это считается антипаттерном.

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

Nexus 20.10.2017 16:18

Цитата:

Сообщение от Alexandroppolus
это считается антипаттерном.

Но реализовать-то таким образом можно.

Я думаю тс так делать не станет, это будет банально неудобно.
Если нужно сделать подобное, то лучше реализовать новый класс, который будет наследовать прототип от Array.

wadim 20.10.2017 16:32

myCar[]=1; - это я думаю не будет работать на js, а так $myCar[]=1; - на php без проблем.

Nexus 20.10.2017 16:39

wadim,
$myCar[]=1;//PHP
==
myCar.push(1);//JS


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