javascript에서 primitive value와 Object 의 차이

#예제1
var x0 = function(){}
x0.prototype={
"v0":"YYY"
,"c0":function(v){
this.v0 = v
}
}
var x1 = new x0;
var x2 = new x0;
console.log(x1.v0 + ":" + x2.v0);  //YYY:YYY
x2.c0("changed");
console.log(x1.v0 + ":" + x2.v0); //YYY:changed

//------=------
# 예제2
var x0 = function(){}
x0.prototype={
"v0":["YYY"]
,"c0":function(v){
this.v0[0] = v
}
}
var x1 = new x0;
var x2 = new x0;
console.log(x1.v0 + ":" + x2.v0); // YYY:YYY
x2.c0("changed");
console.log(x1.v0 + ":" + x2.v0); //changed:changed

# 참고
예제2에서 v0를 각 객체별로 따로 사용하고 싶다면,
var x0 = function(){this.v0 = ["YYY"];}
x0.prototype={
"c0":function(v){
this.v0[0] = v
}
}
처럼 this.v0 로 생성자에서 선언해주면 된다.(prorotype과 연관없이 객체가 따로 생성됨)


//-----=----------
거의 같은 소스지만, 차이점은 prototype.v0에 할당되는 변수가 하나는 문자열, 하나는 배열 이라는 차이.
배열은 객체(Object)이며, 기본적 서로 다른 변수로 선언해도 하나의 객체를 가르치게 된다. (변수 참조라고 생각하면 될 듯)
var x = ["A"];
var y = x;
var z = x;
var y[0] = "B"
console.log(z) // ["B"]

문자열(String),숫자(Number),불린(Boolean)는 그 자체가 값이며, 선언된 변수를 바꾸면 변수의 값이 바뀐다.

var x = "A";
var y = x;
var z = x;
var y = "B"
console.log(z)  // A
console.log(y)  // B

#=========-========
관련 링크

//=== 
간단 요약
  • 객체형을 변수로 넘겨서 값을 바꾸면 해당 원본의 값도 같이 바뀐다. (참조)
  • primitive value 의 변수는 원본과 따로 값이 복사되어 생성되며, 원본과의 연관성이 사라진다.

#====
Q. 예제 소스가 왜이리 복잡한가요?
A. 내가 저런거 만들다가 쓴 글이라서
댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
제목 작성자 날짜
공대여자
공대여자
mins01
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자