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)
И за Deepcopying, който използвам,
Справка: 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
И дъската, и дублираната дъска имат една и съща препратка към клетка[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