2013-07-31 4 views
1

La fonction ne fonctionne pas, elle ne met pas les valeurs en "entrée".Comment hériter de la classe en javascript?

function example(id){ 
    this.code= function(){$('.'+id).val(id)} 
    this.validate= function(){ 
     $('.'+id).keyup(function (e){ 
      if(e.keyCode==13) this.code(); 
     }) 
    } 
} 

corps

<input type="text" class="test"/> 
<input type="text" class="test1"/> 
<script type="text/javascript"> 
    var test= new example('test') 
    var test1= new example('test1') 
    test.validate() 
    test1.validate() 
</script> 
+0

Je pense que les fonctions à l'intérieur "example" deviendra "indéfini" à la place de "id". Vous devez stocker l'ID dans un var privé dans l'exemple de fonction. – MightyPork

+0

@MightyPork: non, la fonction dans 'this.code' héritera de la portée de la fonction parente, et connaîtra la variable' id'. – NDM

+0

Vous savez que votre fonction 'validate()' enregistre simplement un gestionnaire 'keyup' et n'effectue pas la validation? – NDM

Répondre

4

Votre gestionnaire d'événements keyup aura un autre "ce". Vous pouvez utiliser bind pour corriger le problème

keyup(function (e){ 
if(e.keyCode==13) this.code(); 
}.bind(this)) 

Lorsque vous liez à un événement, le gestionnaire est appelé le « ce » jeu mot-clé à l'objet qui a déclenché l'événement, et non pas l'objet qui a créé l'événement.

+0

merci, il fonctionne bien – Carlos

+0

@amit si cela résout votre question, accepter est comme réponse pls ... – NDM

+0

Une chose de plus. vous liez 'this' à l'événement keyup et héritez 'this' à sa fonction parente. Si ma fonction keyup à l'intérieur est une autre fonction et si je veux hériter 'this' à la fonction parent alors comment lier – Carlos

1

javascript Eh bien est un peu difficile à comprendre quand il vient à ce ..

cet article explique certaines d'entre elles http://www.crockford.com/javascript/inheritance.html Mais une façon de le résoudre serait

function example(id){ 
    this.code= function(){$('.'+id).val(id)} 
    var self = this; 
    this.validate= function(){ 
     $('.'+id).keyup(function (e){ 
      if(e.keyCode==13) self.code(); 
     }); 
    } 
} 
Questions connexes