Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.10.2017, 15:07
Профессор
Отправить личное сообщение для wadim Посмотреть профиль Найти все сообщения от wadim
 
Регистрация: 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();
Дальше возникла проблема с вызывом метода отрисовки клетки.
Ответить с цитированием
  #2 (permalink)  
Старый 20.10.2017, 15:18
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,726

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

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

Последний раз редактировалось Nexus, 20.10.2017 в 15:45.
Ответить с цитированием
  #3 (permalink)  
Старый 20.10.2017, 15:24
Профессор
Отправить личное сообщение для wadim Посмотреть профиль Найти все сообщения от wadim
 
Регистрация: 20.01.2014
Сообщений: 150

Nexus напишите пожалуйста как? 10к создаю: for (...) myCar[i]= new Car(); Правильно? Я даже к одному объекту обратится не могу: myCar[0].honk();
Не работает!
Ответить с цитированием
  #4 (permalink)  
Старый 20.10.2017, 15:35
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 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.
Ответить с цитированием
  #5 (permalink)  
Старый 20.10.2017, 15:51
Профессор
Отправить личное сообщение для wadim Посмотреть профиль Найти все сообщения от wadim
 
Регистрация: 20.01.2014
Сообщений: 150

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

wadim,
Что такое myCar[] ? Массив? Элемент массива?
Ответить с цитированием
  #7 (permalink)  
Старый 20.10.2017, 16:08
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

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

в прототипы стандартных объектов можно добавлять только полифилы.
Ответить с цитированием
  #8 (permalink)  
Старый 20.10.2017, 16:18
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,726

Сообщение от Alexandroppolus
это считается антипаттерном.
Но реализовать-то таким образом можно.

Я думаю тс так делать не станет, это будет банально неудобно.
Если нужно сделать подобное, то лучше реализовать новый класс, который будет наследовать прототип от Array.
Ответить с цитированием
  #9 (permalink)  
Старый 20.10.2017, 16:32
Профессор
Отправить личное сообщение для wadim Посмотреть профиль Найти все сообщения от wadim
 
Регистрация: 20.01.2014
Сообщений: 150

myCar[]=1; - это я думаю не будет работать на js, а так $myCar[]=1; - на php без проблем.
Ответить с цитированием
  #10 (permalink)  
Старый 20.10.2017, 16:39
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,726

wadim,
$myCar[]=1;//PHP
==
myCar.push(1);//JS
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перебор массива объектов phoenix200689 Общие вопросы Javascript 5 27.07.2017 09:42
Перебор объектов DivMan Общие вопросы Javascript 15 07.09.2016 10:12
Перебор объектов и вывод значений SeeJ jQuery 6 01.12.2015 10:27
Перебор массива объектов Триви jQuery 12 26.08.2011 09:22
ООП: как создавать наследника от встроенных объектов? Langalier Общие вопросы Javascript 17 02.02.2009 17:07