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) 명령어
[공지] 기술 게시판
4.28
4.29
4.30
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.10
5.11
5.12
5.13
5.14
5.15
5.16
5.17
5.18
5.19
5.20
5.21
5.22
5.23
5.24
5.25
5.26
5.27
5.28
5.29
5.30
5.31
6.1