프로토 타입과 관련하여 객체를 확장하는 것이 좋지 않은 이유를 잘 설명하는 이 기사 를 읽는 것이 좋습니다 .
요약해서 말하자면:
사양 부족
"시제품 객체"의 노출은 사양의 일부가 아닙니다. [...] 구현이 DOM 레벨 2를 완전히 준수하기 위해 전역 노드, 요소, HTMLElement 등 객체를 노출 할 필요가 없습니다.
호스트 객체에는 규칙이 없습니다
DOM 객체는 호스트 객체입니다. [...] 호스트 객체는 구현에 의존하는 동작으로 이러한 내부 메서드를 구현할 수 있습니다.
[...] 내부 메소드 동작은 구현에 따라 다릅니다. [...] 정의상, 당신은 예측할 수없고 완전히 불규칙하게 행동 할 수있는 무언가로 작업하고 있습니다.
충돌 확률
오늘날 사용중인 방대한 양의 환경에서 특정 속성이 이미 일부 DOM의 일부가 아닌지 알 수 없습니다. [...]
모든 명명 된 양식 컨트롤은 프로토 타입 체인을 통해 상속 된 속성을 숨 깁니다. 양식 요소의 충돌 및 예기치 않은 오류 가능성이 훨씬 높습니다.
접두사 전략을 사용하면 문제를 완화 할 수 있습니다. 그러나 아마도 추가 노이즈가 발생할 것입니다.
성능 오버 헤드
[...] IE 6, 7, Safari 2.x 등과 같은 요소 확장을 지원하지 않는 브라우저에는 수동 개체 확장이 필요합니다. 문제는 수동 확장이 느리고 불편하며 확장 할 수 없다는 것입니다.
[...] 요소 확장을 시작하면 라이브러리 API는 확장 된 요소를 어디에서나 반환해야합니다. 결과적으로 $$와 같은 쿼리 방법은 쿼리의 모든 단일 요소를 확장 할 수 있습니다.
IE DOM은 엉망입니다
이전 섹션에서 볼 수 있듯이 수동 DOM 확장은 엉망입니다. 그러나 IE의 수동 DOM 확장은 훨씬 더 나쁘다 ...]
보너스 : 브라우저 버그
for(var ... in ...)
프로토 타입 기능도 통과하기 때문에 루프가 엉망.