__proto__
는 Object.getPrototypeOf
가 가지지 않은 추가적인 기능이 있다. 그것은 __ proto __
로 객체의 prototype
링크를 수정할 수 있다는것이다. 이 기능은 크게 잘못되어 보이지 않는데, 결과적으로는 아주 큰 영향을 끼친다.
첫번째로 이식성이 있다. 모든 플랫폼이 객체의 프로토타입 수정을 지원하지는 않기 때문에 이식성 있는 코드
를 작성할 수 없다.
또 하나의 이유는 성능
때문이다. 자바스크립트 엔진은 객체의 프로퍼티를 가져오거나 설정하는 동작을 고도로 최적화
한다. 근데 만약 __ proto __
로 객체의 내부 구조를 수정한다면 이러한 최적화가 무효화
된다. __ proto__
를 수정하는 행위는 객체의 상속구조 자체르 변경하는 행위이고 일반적은 프로퍼티를 수정하는 것보다 훨씬더 많은 최적화를 무효화 시킬 수 있다.
객체의 프로토 타입 연결을 수정하는 것은 뇌를 이식
하는 것과 마찬가지이다. 이는 곧 객체의 상속 체계를 교체
하는 것과 같다. 기본적인 동작을 유지하기 위해서는 상속 체계가 반드시 안정적인 상태를 유지해야 한다.
임의로 지정된 프로토타입 연결을 가지는 새로운 객체를 생성하기 위해 ES5에서 제공하는 Object.create()
함수를 사용할 수 있다.
__proto__
프로퍼티를 절대 수정하지 마자