|
|

20.10.2017, 15:07
|
|
Профессор
|
|
Регистрация: 20.01.2014
Сообщений: 150
|
|
|
ООП - перебор объектов и применение к ним метода
Всем привет! Как создать много объектов, к примеру 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();
Дальше возникла проблема с вызывом метода отрисовки клетки.
|
|

20.10.2017, 15:18
|
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,842
|
|
|
wadim, Создать 10к экземпляров объекта можно в цикле, либо вручную.
Вызвать метод "honk" всех объектов массива myCar сразу нельзя, нужно пробежаться по элементам массива в цикле и вызвать для каждого объекта массива этот метод.
PS. Можно расширить прототипа объекта Array, добавив в него новый метод, который будет это реализовывать.
Последний раз редактировалось Nexus, 20.10.2017 в 15:45.
|
|

20.10.2017, 15:24
|
|
Профессор
|
|
Регистрация: 20.01.2014
Сообщений: 150
|
|
|
Nexus напишите пожалуйста как? 10к создаю: for (...) myCar[i]= new Car(); Правильно? Я даже к одному объекту обратится не могу: myCar[0].honk();
Не работает!
|
|

20.10.2017, 15:35
|
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Как это не работает?
<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, 20.10.2017 в 15:46.
|
|

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

20.10.2017, 16:04
|
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
|
wadim,
Что такое myCar[] ? Массив? Элемент массива?
|
|

20.10.2017, 16:08
|
 |
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,013
|
|
|
Сообщение от Nexus
|
|
Можно расширить прототипа объекта Array, добавив в него новый метод
|
это считается антипаттерном.
в прототипы стандартных объектов можно добавлять только полифилы.
|
|

20.10.2017, 16:18
|
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,842
|
|
|
Сообщение от Alexandroppolus
|
|
это считается антипаттерном.
|
Но реализовать-то таким образом можно.
Я думаю тс так делать не станет, это будет банально неудобно.
Если нужно сделать подобное, то лучше реализовать новый класс, который будет наследовать прототип от Array.
|
|

20.10.2017, 16:32
|
|
Профессор
|
|
Регистрация: 20.01.2014
Сообщений: 150
|
|
|
myCar[]=1; - это я думаю не будет работать на js, а так $myCar[]=1; - на php без проблем.
|
|

20.10.2017, 16:39
|
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,842
|
|
wadim,
$myCar[]=1;//PHP
==
myCar.push(1);//JS
|
|
|
|