먼저 현상을 살펴보겠습니다.
apply_and_call
;
DIV를 클릭하면 팝업 상자가 정의되지 않음으로 표시됩니다.
그 이유는 DOM 객체가 click 이벤트에 응답할 때 이벤트 메소드의 this 키워드가 DOM 객체를 가리키기 때문입니다. 이때 DOM 객체에는 속성이 없으므로 undefine이 팝업됩니다.
프로그래머의 원래 의도는 응답 이벤트 메서드에서 클래스 A의 객체를 가리키는 것입니다. 어떻게 이를 달성할 수 있습니까? 이를 위해서는 호출 또는 적용 메소드를 사용해야 합니다.
호출 방법에 대해 알아봅시다:
요약:
function.call(thisobj, args…)
매개변수:
thisobj
호출 함수의 개체입니다. 함수 본문에서 thisobj는 키워드 this의 값입니다.
args…
임의 개수의 매개변수, 이러한 매개변수는 함수 function에 전달됩니다.
반환값:
함수 호출 함수의 반환값입니다.
발생:
TypeError
함수를 호출하는 객체가 함수가 아닌 경우 이 예외가 발생합니다.
설명:
call()은 지정된 함수 함수를 thisobj 개체의 메서드로 호출하고 매개변수 목록에서 thisobj 뒤의 매개변수를 전달합니다. 반환 값은 함수 호출 후 반환 값입니다. 함수 본문 내에서 this 키워드는 thisobj 개체를 나타냅니다.
지정된 배열이 함수에 매개변수로 전달되는 경우 Function.apply() 메서드를 사용하세요.
call() 메소드에 익숙해진 후 코드 1을 다음과 같이 수정합니다.
코드 2:
코드 복사
apply_and_call < script type="text/javascript">
function init() {
var el = document.getElementById("testDiv")
var a = new classA(el) ;
}
function classA(el) {
this.t = 1;
this.clickDele = createDele(this.click, this);
}
classA.prototype = {
click:function() {
alert(this.t);
}
}
function createDele(fun, obj, arg ) {
return function() {
return fun.call(obj, arg)
}
}