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}}
    -
목록형 📷 갤러리형
제목
[기본형] HTML (with 부트스트랩5.3 , jquery 3.7, vue.js)
유용한 리눅스(LINUX) 명령어
[공지] 기술 게시판
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
2.16
2.17
2.18
2.19
2.20
2.21
2.22
2.23
2.24
2.25
2.26
2.27
2.28