[Effective JavaScript] __ proto __ 를 절대 수정하지 말자

김범식·2023년 7월 17일
0

Effective JavaScript

목록 보기
29/33
post-thumbnail

proto 를 절대 수정하지 말자




__proto__Object.getPrototypeOf가 가지지 않은 추가적인 기능이 있다. 그것은 __ proto __로 객체의 prototype링크를 수정할 수 있다는것이다. 이 기능은 크게 잘못되어 보이지 않는데, 결과적으로는 아주 큰 영향을 끼친다.

1. 이식성

첫번째로 이식성이 있다. 모든 플랫폼이 객체의 프로토타입 수정을 지원하지는 않기 때문에 이식성 있는 코드를 작성할 수 없다.

2. 성능

또 하나의 이유는 성능 때문이다. 자바스크립트 엔진은 객체의 프로퍼티를 가져오거나 설정하는 동작을 고도로 최적화 한다. 근데 만약 __ proto __로 객체의 내부 구조를 수정한다면 이러한 최적화가 무효화 된다. __ proto__ 를 수정하는 행위는 객체의 상속구조 자체르 변경하는 행위이고 일반적은 프로퍼티를 수정하는 것보다 훨씬더 많은 최적화를 무효화 시킬 수 있다.

3. 예측 가능한 동적을 유지

객체의 프로토 타입 연결을 수정하는 것은 뇌를 이식하는 것과 마찬가지이다. 이는 곧 객체의 상속 체계를 교체하는 것과 같다. 기본적인 동작을 유지하기 위해서는 상속 체계가 반드시 안정적인 상태를 유지해야 한다.

Object.create()

임의로 지정된 프로토타입 연결을 가지는 새로운 객체를 생성하기 위해 ES5에서 제공하는 Object.create() 함수를 사용할 수 있다.



기억할 점

  • 객체의 __proto__ 프로퍼티를 절대 수정하지 마자
  • 새로운 객체에 임의로 지정된 프로토타입을 제공하기 위해 Object.create()을 사용하자
profile
frontend developer

0개의 댓글