Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.12.2012, 23:17
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Не понятное поведение при копирование массива
Вроде все просто и понятно, но что то не так и не как не могу понять что
console.log("Уровень " + Number + " загружен");

           if (!Levels[Number]) throw "Ошибка: Уровень не найден!";

           console.log("Рисование Уровня...");

           self.Current = Levels[Number];

           self.CurrentMatrix = self.Current.TextureMatrix.slice(0);// вот тут копируется массив 

           obj_draw = new Draw(self.Current, DrawCallback);// внутри функции  идет обращение к свойству CurrentMatrix

на прямую self.Current.TextureMatrix обращения к массиву нет ,обращение только к CurrentMatrix, но исходный массив все равно изменяется, уже час голову ломаю не могу понять почему...
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #2 (permalink)  
Старый 16.12.2012, 23:26
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

самое странное, когда я создаю новую переменную и в нее копирую до каких либо действий с массивом все равно записуеться измененный массив...
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #3 (permalink)  
Старый 17.12.2012, 00:04
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от cyber
Number
а как насчёт использования зарезервированных слов?
http://javascript.ru/Number
Ответить с цитированием
  #4 (permalink)  
Старый 17.12.2012, 00:05
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

cyber,
Имхо связано со .slice()

Скопируй вначале в переменную,
var a = self.Current.TextureMatrix.slice(0);
self.CurrentMatrix = a;
Ответить с цитированием
  #5 (permalink)  
Старый 17.12.2012, 00:16
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Deff, не помогло=(
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #6 (permalink)  
Старый 17.12.2012, 00:17
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

dmitriymar, спс поправил, но не один браузер не среагировал на эту ошибку...
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #7 (permalink)  
Старый 17.12.2012, 14:27
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

cyber, на понимаю, какой ответ ты хочешь получить, не показывая код функции-конструктора Draw.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #8 (permalink)  
Старый 17.12.2012, 14:49
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

Сообщение от cyber
не один браузер не среагировал на эту ошибку
Это не ошибка, а Number - не зарегистрированное слово.

У тебя в self.Current.TextureMatrix ведь тоже объекты, небось тоже массивы? Их тоже нужно клонировать.
Ответить с цитированием
  #9 (permalink)  
Старый 17.12.2012, 14:55
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

Мне кажется удачным копировать объекты через Object.create:
var matrix = [[1]];
var matrix_copy = matrix.map(function ( x ){
  return Object.create( x );
});

matrix_copy[0][0] = 2;

alert( matrix[0][0], matrix_copy[0][0] );
Ответить с цитированием
  #10 (permalink)  
Старый 17.12.2012, 15:22
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от BallsShaped
а Number - не зарегистрированное слово
это глобальный конструктор
alert( Number );

в самом низу страницы http://sahart.ru/javascript/view_javaruk.php?id=2

Сообщение от BallsShaped
У тебя в self.Current.TextureMatrix ведь тоже объекты, небось тоже массивы?
все указывает на это (что объекты)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 17.12.2012 в 15:28.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
копирование в Буфер при клике на картинку Павел Общие вопросы Javascript 7 14.07.2013 00:51
Как при переборе массива к выбранным элементам присвоить тип - число Rich Общие вопросы Javascript 1 27.03.2011 13:09
Изменение стиля родительского элемента при :hover дочернего lanzs Элементы интерфейса 2 16.10.2010 13:28
Помогите разобраться с повторением при генерации массива (Javascript) JsLoveR Javascript под браузер 4 16.12.2009 15:26