다음은 몇 가지 예입니다. 할당이 동일한 위치 (그냥 프로토 타입)을 모두 객체 포인트를 만드는 동안 나는 Object.create()
생각Object.create() 사용과 대입 연산자 사용의 차이점은 무엇입니까?
// case 1:
var obj1 = {msg : 'Hello'};
var obj2 = obj1;
obj2.msg = "Hi!"; //overwrites
alert(obj1.msg); //=>'Hi!'
// case 2:
var obj1 = {msg : 'Hello'};
var obj2 = Object.create(obj1);
obj2.msg = "Hi!"; //does not overwrite
alert(obj1.msg); //=>'Hello'
// case 3:
var obj1 = {data: { msg : 'Hello'}}
var obj2 = Object.create(obj1);
obj2.data.msg = "Hi!"; //overwrites, Why?
alert(obj1.data.msg); //=>'Hi!'
은, 모두 같은 프로토 타입 두 지점을 만들어 준다. 그렇다면 왜 데이터 오브젝트는 케이스 3에서 덮어 쓰여 집니까? 만 단순 복사본을 만듭니다 Object.create()
때문에
프로토 타입 속성을 설정할 때 문자열이나 숫자와 같은 간단한 값인 경우 프로토 타입이 아닌 객체 자체에 설정되지만, 기존 객체 또는 배열 속성을 수정하면 프로토 타입의 속성이 변경됩니다. 구별을 이해하는 것이 중요합니다. 왜냐하면 상속을 올바르게 수행하는 데 영향을 미치기 때문입니다. 자세한 내용은 http://www.bennadel.com/blog/1566-Using-Super-Constructors-Is-Critical-In-Prototypal-Inheritance-In-Javascript.htm을 참조하십시오. –