2016년 8월 12일 금요일

자바스크립트 프로토 타입의 프로퍼티 할당

지난번 게시물에서 자바스크립트의 객체에서 특정 프로퍼티를 찾을 때, 프로토 타입 체인의 순서에 의해서 값을 찾아 나간다는 것을 배웠습니다.

그런데 이 프로토 타입 체인이 값을 "찾을 때" 뿐 아니라 값을 "할당 할 때"도 동일하게 작동 하는 것을 확인했습니다.

아래 소스를 보면..
var Test = function(){}
Test.prototype = {
    a : {
        aa : '1'
    }
}
var TestA = new Test();
var TestB = new Test();
TestB.a.aa= '2';
console.log(TestA.a.aa); //2
console.log(TestB.a.aa); //2


위에서 신기한 것은, TestB 객체에 직접 프로퍼티 값을 할당했는데도, Test 함수의 프로토 타입의 값이 바뀌었다는 것입니다. (이 내용이 잘 이해 안되시면 프로토 타입 체인에 대해서 찾아 보시기 바랍니다.^^)

이유는 처음에도 말한것 처럼 자바스크립트의 객체는 값을 할당할 때도 프로토 타입 체인을 따라가기 때문입니다.

TestB.a.aa= '2'; 을 실행했을때, TestB에는 a라는 프로퍼티가 없기 때문에 'aa'라는 프로퍼티를 생성 할 수가 없습니다. 보통은 자바스크립트가 error를 뿌리면서 실행이 중지되죠.
하지만 이 경우에는 자바스크립트는 프로토타입에 a라는 프로퍼티가 존재합니다. 따라서 프로토타입 체인 순서에 의해 Test객체의 prototype 프로퍼티에 있는 a.aa에 값을 할당하게 됩니다.
Test객체의 prototype 값이 바뀌었으므로 이를 상속받는 TestA객체도 영향을 받은 것이지요.

자바스크립트는 참 유연한 언어라는걸 또한번 느낄수 있었네요.

댓글 없음:

댓글 쓰기