특히 IE를 제외한 모든 브라우저에서 사용할 수있는 getElementsByClassName 함수를 재정의하고 싶습니다. IE는 대신 querySelectorAll을 사용합니다.네이티브 JavaScript 함수 덮어 쓰기
Element.prototype.getElementsByClassName = function(className) {
if(document.getElementsByClassName) {
return this.getElementsByClassName(className);
} else if(document.querySelectorAll) {
return this.querySelectorAll(className);
}
};
Firefox에서 코드를 실행하면 대신 native 함수가 사용됩니다. 여전히 교차 브라우저 솔루션으로 작동하고 getElementsByClassName을 사용할 수없는 경우 제 프로토 타입을 사용합니까, 아니면 내 코드가 매번 사용되도록 기본 함수를 재정의 할 수있는 방법이 있습니까? 프로토 타입의 이름을 비슷한 이름으로 지정할 수는 있지만 가독성을 높이기 위해 ID는 동일하게 유지하는 것을 선호합니다.
왜 진짜 심 (polyfill)을 사용하지 않습니까? 즉 :'if (! Element.prototype.getElementsByClassName) {Element.prototype.getElementsByClassName = function() {...}; }'http://polyfilljs.com/polyfills/getelementsbyclassname.html –
당신은 혼란 스럽습니다. * getElementsByClassName *은 [host] (http://es5.github.com/#x4.3.8) 메소드입니다. [native ] (http://es5.github.com/#x4.3.6) 방법을 참조하십시오. – RobG
@ MattBall-이 방법을 사용하지 마십시오. 이런 식으로 ** host ** 객체 나 메소드를 수정할 수 있다고 기대할 수는 없습니다 (Prototype.js가 전략으로 놓은 이유를 연구하십시오). 시도한다면 철저한 기능 테스트를 포함시켜야합니다. – RobG