Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.07.2014, 16:10
Интересующийся
Отправить личное сообщение для jeka123 Посмотреть профиль Найти все сообщения от jeka123
 
Регистрация: 21.08.2013
Сообщений: 17

Двумерный массив обьектов
ребят такая проблема хочу присвоить значение обьекту в двухмерном массиве
chip = true но присвоение идет для всех элементов массива.Почему?
var n = 4, m = 4,player = 2;
var pl_list_1 = [];
var pl_list_2 = [];
var sea = {
   chip :false,
   opened:false,
   msg:'Промазал'
};
 
for (var i = 0; i < m; i++){
    pl_list_1[i] = [];
    pl_list_2[i] = [];
    for (var j = 0; j < n; j++){
        pl_list_1[i][j] = sea;
        pl_list_2[i][j] = sea; 
        
}}
for (var z = 1; z <= player; z++){
do {
    var x = prompt(z+' Игрок\nВведите ваши координты кораблей');
    var y = prompt(z+' Игрок\nВведите ваши координты кораблей');
    message = confirm(z +' Игрок вы продолжаете ввод?');
     putship(x,y,z);
   } while (message ===true);
}
//console.log(pl_list_1);
//console.log(pl_list_2);
alert('Война началась!');
  console.log(pl_list_1);
function putship(x,y){
  alert(x);alert(y);
  pl_list_1[x][y].chip = true;
}
Ответить с цитированием
  #2 (permalink)  
Старый 06.07.2014, 16:28
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от jeka123
присвоение идет для всех элементов массива.Почему?
Потому что все элементы массивов ссылкаются на один и тот же объект. Нужно сделать, чтобы это были разные объекты. Вариантов куча:
1.
pl_list_1[i][j] = new Sea;
        pl_list_2[i][j] = new Sea;

function Sea() {
    this.chip = false;
    this.opened = false;
    this.msg = 'Промазал';
}

2
pl_list_1[i][j] = getSea();
        pl_list_2[i][j] = getSea();

function getSea() {
    return {
        chip :false,
        opened:false,
        msg:'Промазал'
    };
}

3.
var sea = {
   chip :false,
   opened:false,
   msg:'Промазал'
};

        pl_list_1[i][j] = Object.create(sea);
        pl_list_2[i][j] = Object.create(sea);

4.
pl_list_1[i][j] = {
            chip :false,
            opened:false,
            msg:'Промазал'
        };
        pl_list_2[i][j] = {
            chip :false,
            opened:false,
            msg:'Промазал'
        };
Все эти варианты, на первый взгляд, работают одинаково. Но все они разные и каждый имеет свои особенности. Такие дела.
Ответить с цитированием
  #3 (permalink)  
Старый 06.07.2014, 16:56
Интересующийся
Отправить личное сообщение для jeka123 Посмотреть профиль Найти все сообщения от jeka123
 
Регистрация: 21.08.2013
Сообщений: 17

оооо Спасибо блин а я не знал я думал что просто если обьект sea присвоить будет все норм.Спасибо большое!!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать двумерный массив и заполнить maternik Общие вопросы Javascript 3 19.10.2013 20:25
ДвумернЫй массив в базу и обратно Alexonus Общие вопросы Javascript 7 13.03.2013 18:05
Как создать двумерный массив с помощью циклов. dima*** Ваши сайты и скрипты 30 16.12.2012 12:58
Задачки на двумерный массив rjabijj Серверные языки и технологии 1 03.07.2012 09:06
Задачки на двумерный массив rjabijj Элементы интерфейса 2 02.07.2012 18:58