2009-10-26 4 views
0

다음 코드를 사용하여 주어진 요소를 둘러싼 2 차원 배열의 요소를 증가시킵니다.하나만 있어야 할 때 배열의 모든 요소가 동시에 증가됩니다.

EmptyCell = {number: 0}; //This has several parts in the actual code. 
list = new Array(); 

function init(w,h){ 
    for (var x = 0; x <= w; x++){ 
     list[x] = new Array(); 
     for (var y = 0 ; y <= h; y++){ 
      list[x][y] = EmptyCell; 
     } 
    } 
} 

function map(func,x,y){ 
    var xoff = [1,1,1,0,0,-1,-1,-1]; 
    var yoff = [1,0,-1,1,-1,1,0,-1]; 
    for (var atIndex = 0; atIndex < 8; atIndex++){ 
     func(x+xoff[atIndex],y+yoff[atIndex]); 
    } 
} 

그리고는 나는이처럼 실행 때마다 list[x][y].number++이 실행

init(10,10); 

map(function(x,y){ 
    if (list[x] != null && list[x][y] != null){ 
     list[x][y].number++; 
    } 
},0,0); 

는 전체 배열의 모든 요소가

증가합니다. 누군가가 왜 이런 일이 발생했는지 설명 할 수 있습니까?

답변

10

EmptyCell은 개체이므로 모든 요소가 동일한 개체를 참조합니다. 각 요소에 대해 별도의 개체를 사용하려면 매번 새 인스턴스를 만듭니다.