javascript에서 primitive value와 Object 의 차이

1 minute read

#예제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. 내가 저런거 만들다가 쓴 글이라서


🔗original-link

Updated: