객체지향 - 참조

복제

var a = 1;
var b = a;
b = 2;
console.log(a); // 1

복제

복제할 데이터의 타입이 원시데이터타입일때 복제로 작동하게 된다.

참조

var a = {'id':1};
var b = a;
b.id = 2;
console.log(a.id); // 2

참조

복제할 데이터가 객체타입이면 복제가 아닌 참조로 작동하게 된다.

하지만

var a = {'id':1};
var b = a;
b =  {'id':2};
console.log(a.id); // 1

이렇게 객체를 할당해주게 되면 a.id에는 영향을 주지 않는다.

객체를 할당하면 b에 새로운 객체가 생성되기 때문에 a와 같은 객체를 바라보지 않고

새로 할당된 새로운 객체를 바라보게 되기때문에 a에 영향을 주지 않는다 .

함수와 참조

원시데이터를 인자로 넘겼을때(복제)

var a = 1;
function func(b){
 b = 2;
}
func(a); 
console.log(a);

결과 1

a=1 , b=a, b=2 이지만 ba에 영향을 주지 않기 때문에 a=1 이다.

객체를 인자로 넘겼을 때(참조)

var a = {'id':1};
function func(b){
 b = {'id':2};
}
func(a);
console.log(a.id); // 1

결과 1

a={id:1}; b=a; b={id:2};

a={id:1}; b=a; : ba는 같은 객체를 가리키고 있는 상태이지만

b={id:2}; : 이부분으로 인해서 ba와의 관계가 끊기고 새로운 객체를 가리키게 된다.

var a = {'id':1};
function func(b){
 b.id = 2;
}
func(a);
console.log(a.id); // 2

결과 2

a={id:1}; b=a; b.id=2; a.id=2;

a={id:1}; b=a; : ab는 같은 객체를 가리키고 있는 상태 b.id=2; : bid가 수정이 되면서 같은 객체를 가리키고 있는 a도 영향을 받게 된다.

Discussion and feedback