《프로그래밍 jQeury》의 부록A(appendix A)를 읽고 메모한 것이다.
자바스크립트는 함수를 변수 취급한다.
다음 세 코드는 동일한 내용이다.
function wow(){ alert('wow!'); } var wow=function() { alert('wow!'); } window.wow = function() { alert('wow!'); }
다른 객체 지향 언어와 달리 자바 스크립트에서 함수는 어떤 객체의 메서드가 아니다
이렇게 표현하는 편이 정확하다고 한다.
함수 f를 호출할 때 함수 콘텍스트로 객체 o가 제공되면 f는 o의 메서드 역할을 한다.
이와 관련한 코드는 다음과 같다.
var o1 = {handle:'o1'}; var o2 = {handle:'o2'}; var o3 = {handle:'o3'}; window.handle = 'window'; function whoAmI() { return this.handle; } o1.identifyMe = whoAmI; alert(whoAmI()); alert(o1.identifyMe()); alert(whoAmI.call(o2)); alert(whoAmI.apply(o3));
《프로그래밍 jQuery》의 예제를 그대로 넣은 것이다.
call()
과 apply()
는 위에서 whoAmI라는 함수의 콘텍스트로 객체2(o2)와 객체3(o3)을 제공하는 역할을 한다. call()
과 apply()
는 바로 그런 역할을 하는 함수다.
위의 코드를 찬찬히 뜯어보면, 자바 등의 객체지향 언어의 메서드와 자바스크립트의 함수가 어떻게 다른지 알 수 있을 것이다.
댓글 남기기