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
#=========-======== 관련 링크
- Annotated ECMAScript 5.1 #primitive value
- MSDN Data Types (JavaScript)
- http://stackoverflow.com/questions/13266616/primitive-value-vs-reference-value
- http://pages.cs.wisc.edu/~bahls/cs302/PrimitiveVsReference.html
//=== 간단 요약
- 객체형을 변수로 넘겨서 값을 바꾸면 해당 원본의 값도 같이 바뀐다. (참조)
- primitive value 의 변수는 원본과 따로 값이 복사되어 생성되며, 원본과의 연관성이 사라진다.
#==== Q. 예제 소스가 왜이리 복잡한가요? A. 내가 저런거 만들다가 쓴 글이라서