2011-02-06 12 views
6

가능한 복제를 호스트 기능을 참조하기 :
JavaScript function aliasing doesn't seem to work자바 스크립트 : 지역 변수를 통해

하지 않는 이유는이 작품? 파이어 폭스에서 Uncaught TypeError: Illegal invocation
을 ... 그리고 :

function foo() { 

    var g = document.getElementById; 

    g('sampleID'); 

} 

이 오류는 크롬에 발생합니다 Error: uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" 그것은하지만 IE9 베타 버전에서 작동

!

데모 :http://jsfiddle.net/ugBpc/

+0

가능한 중복에 http : // 유래. com/questions/1007340/javascript-function-aliasing-doesnt-seem-to-work) –

+0

'g.call (document, 'sampleID');'?? – Pointy

+0

@Pointy 아니, 나는 생각하지 않았다 앞에 : –

답변

5

대부분의 브라우저는 document.getElementById 방법은 원래 개체 (document)의 맥락에서라고해야합니다. 그래서이 작동합니다 : 이것은하지만, Internet Explorer 7 및 낮은에 실패합니다

function foo() {  
    var g = document.getElementById;  
    g.call(document, 'sampleID'); 
} 

, DOM 방법을 Function.prototype에서 상속하지 않기 때문에. 원래 예제는 모든 버전의 Internet Explorer에서 작동해야합니다.

또한이를 지원 어디서 당신이 compatibility implementation을 제공 한 브라우저에서, Function.prototype.bind 사용할 수 있습니다 ([작동하지 않는 자바 스크립트 함수의 별칭]의

function foo() {  
    var g = document.getElementById.bind(document);  
    g('sampleID'); 
} 
+1

위 답변은 +2':)' –

+0

+1입니다. 나는 이것의 무엇이든을하기에 대하여 조언 할 것입니다. 'document.getElementById()'가 너무 길면 호스트 메소드에 대한 참조를 생성하기보다는 짧은 이름을 가진 함수로 감싸기 만하면됩니다. –

+0

@Tim Down : 동의합니다. 이런 식으로'bind'를 사용할 필요가 없다고 생각합니다. 얼마전에 성능을 테스트했는데 크롬과 파이어 폭스에서는 그 속도가 느려졌습니다 (왜 그런지는 잘 모르겠지만). –

관련 문제