2010-05-21 2 views
1

onkeypress 외부에서 killSwitch()를 호출하면 오류가 발생합니다. 하지만 onkeypress 함수 안에서는 정상적으로 작동했습니다. 왜? 당신은 개체 인스턴스 (this.killSwitch)의 속성으로 방법을 정의하기 때문에javascript가 특권 메소드를 호출

// this works fine 
var ClassA = function() 
{ 
    var doc = document; 
// killSwitch(); 

    doc.onkeypress = function(e){ killSwitch(); } 
    this.killSwitch = function(){ alert('hello world'); } 
} 

var myClass = new ClassA(); 

답변

4

당신은 killSwitch를 호출 할 수 없습니다.

당신은이 document을 참조하기 때문에, 당신은 this 값을 저장해야는 keypress 이벤트 내부 this를 사용할 수 없습니다

var ClassA = function() { 
    var doc = document, 
       instance = this; // store reference to `this` 

    doc.onkeypress = function(e){ instance.killSwitch(); }; 
    this.killSwitch = function(){ alert('hello world'); }; 
} 

var myClass = new ClassA(); 
+0

쥐, 당신은 저를 30 초 동안 이겼습니다! +1, 멋진 답변 – Josh

0

시도 :

var ClassA = function() 
{ 
    var doc = document; 
    var killSwitch = function(){ alert('hello world'); }; 
    killSwitch(); 

    doc.onkeypress = function(e){ killSwitch(); } 
    this.killSwitch = killSwitch 
} 

var myClass = new ClassA(); 

이 방법 당신에게 ClassA 함수 내에서 killSwitch 함수를 정의하여 클로저를 만들고 클래스 내부와 외부에서 사용할 수 있습니다.

관련 문제