2010-05-21 7 views
1

Si j'appelle le killSwitch() en dehors de l'onkeypress, je provoquerai une erreur. Mais à l'intérieur de la fonction onkeypress, j'ai très bien fonctionné. Pourquoi?javascript appel d'une méthode privilégiée

// 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(); 

Répondre

4

Vous ne pouvez pas appeler killSwitch parce que vous défini la méthode comme une propriété de l'instance d'objet (this.killSwitch).

Vous ne pouvez pas utiliser this dans l'événement keypress, car il fera référence à la document, vous devez stocker la valeur 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

Rats, vous me battez de 30 secondes! +1, belle réponse – Josh

0

Essayez:

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(); 

De cette façon, vous définir la fonction killSwitch à l'intérieur de la fonction ClassA, créant une fermeture, et il est disponible à l'intérieur et à l'extérieur de la classe.