Board = function()
{
var cells = [8];
/**
* Initializing every cell using numeric format.
* */
for (var i=0 ; i<8; i++){
cells[i] = [8];
for (var j=0 ; j<8; j++)
cells[i][j] = new Cell(new Position(i,j));
}
....
}
В другом коде GameManager.js,
var duplicateBoard = Copy.deepCopy(board);
board.moveCell(1,2)
И для глубокого копирования я использую,
Ссылка: http://jsperf.com/deep-copy-vs-json-stringify-json-parse
function deepCopy(o) {
var copy = o,k;
if (o && typeof o === 'object') {
copy = Object.prototype.toString.call(o) === '[object Array]' ? [] : {};
for (k in o) {
copy[k] = deepCopy(o[k]);
}
}
return copy;
}
Моя потребность:
Я хочу, чтобы cells
(закрытый член конструктора) в Board
был глубоко скопирован.
Проблема:
Но при отладке с помощью firebug я увидел, что функция deepCopy
не выполняет глубокое копирование частных объектов конструктора.
Мой случай: board.moveCell(1,2)
, здесь ячейка [1][2] тоже перемещена в duplicateBoard
.
То есть глубокого копирования cell
не было. И доска, и дубликатBoard имеют одинаковую ссылку на ячейку[1][2].
Что я отследил? Функция глубокого копирования рассматривает constructor
как функцию, поэтому она игнорирует глубокое копирование функций, поскольку в typeof o === 'object
произойдет сбой. Но удаление этого условия бесполезно, потому что при этом duplicateBoard
не имеет функций, а все функции относятся к типу object{}
.
copy = $.extend(true, {}, board);
, но я не знаю, действительно ли это работает (не проверено) - person Niccolò Campolungo   schedule 26.05.2013cells
закрытием, потому что к нему не может получить доступ ни одна другая функция. - person Muthu Ganapathy Nathan   schedule 26.05.2013cells
было закрытым (приватным), но при этом глубоко копировал их. - person Muthu Ganapathy Nathan   schedule 26.05.2013private
, чтобы другие классы не могли получить к нему доступ (АБСТРАКЦИЯ ДАННЫХ) - person Muthu Ganapathy Nathan   schedule 26.05.2013this.clone
, там тоже возникнет та же проблема. не могли бы вы предоставить пример кода. - person Muthu Ganapathy Nathan   schedule 26.05.2013deep-Copy
в каждой функции, что помогает копировать ее члены. - person Muthu Ganapathy Nathan   schedule 26.05.2013