|
Не понятное поведение при копирование массива
Вроде все просто и понятно, но что то не так и не как не могу понять что
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, но исходный массив все равно изменяется, уже час голову ломаю не могу понять почему... |
самое странное, когда я создаю новую переменную и в нее копирую до каких либо действий с массивом все равно записуеться измененный массив...
|
Цитата:
http://javascript.ru/Number |
cyber,
Имхо связано со .slice() Скопируй вначале в переменную, var a = self.Current.TextureMatrix.slice(0); self.CurrentMatrix = a; |
Deff, не помогло=(
|
dmitriymar, спс поправил, но не один браузер не среагировал на эту ошибку...
|
cyber, на понимаю, какой ответ ты хочешь получить, не показывая код функции-конструктора Draw.
|
Цитата:
У тебя в self.Current.TextureMatrix ведь тоже объекты, небось тоже массивы? Их тоже нужно клонировать. |
Мне кажется удачным копировать объекты через 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] ); |
Цитата:
alert( Number ); в самом низу страницы http://sahart.ru/javascript/view_javaruk.php?id=2 Цитата:
|
Часовой пояс GMT +3, время: 01:49. |
|