2012-04-19 4 views
-2

En JavaScript, j'ai créé une classe User. J'ai écrit une méthode (fonction) à ceci, mais je ne peux pas donner une déclaration de retour. Voici ma classe:Instruction de retour de méthode d'objet JavaScript

function User() { 
    var isLogedIn = "FukkaMukka"; 
    var mail = ""; 
    var name = ""; 

    //functions 

    this.isLogedInFn = function(callback) { 
     $.post("controller.php?module=login&action=test", function(e) { 
      this.isLogedIn = false; // Here i can't reach the object variable.. why? 
      return e; 
     }) 
    } 
    this.logIn = logIn; 

} 
+0

duplication possible de [Portée variable: this.remove n'est pas une fonction] (http://stackoverflow.com/questions/3754273/variable-scope-this-remove-is-not-a-function) – JJJ

+2

Je suis surpris que personne d'autre ne l'ait dit, mais ... ** return à l'intérieur de $ .post est inutile ** car il fonctionne "de manière asynchrone". Aussi, 'isLoggedIn' est l'orthographe correcte ;-) –

+1

Oh, aussi je" ferme comme pas une vraie question "parce qu'aucun détail de * quel est le problème réel * n'a été donné, et aucune * question * spécifique à ce sujet n'a été a demandé. Si elles étaient, il pourrait être identifié comme l'un des millions de doublons :( –

Répondre

1

Le rappel n'est pas exécuté dans le context de votre objet. Plusieurs façons de travailler autour de:

  • appel jQuery.ajax avec le paramètre context
  • bind() votre fonction à votre objet
  • stocker une référence à votre objet dans une utilisation variable (comme Sarfraz suggéré)
0
function User() { 
    var isLogedIn = "FukkaMukka"; 
    var mail = ""; 
    var name = ""; 
    var self = this; 
    //functions 

    this.isLogedInFn = function(callback) { 
     $.post("controller.php?module=login&action=test", function(e) { 
      // `this` is no longer in the scope of the function as you would think it would be. in this case `this` iirc will reference the window object. 
      self.isLogedIn = false; 
      return e; 
     }) 
    } 
    this.logIn = logIn; 

} 

Voir les commentaires dans le code.

+0

J'ai changé le "ceci" en "soi" mais ne fonctionne pas ... – tthlaszlo

+0

vous devez également définir 'self' ... voir la déclaration ci-dessus' // fonctions' – rlemon

Questions connexes