2010-06-25 3 views
2

Nous avons discussion avec notre équipe sur la prochaine: Quel nom correct devrait avoir une variable qui sera un alias pour "ceci" dans la fonction anonyme. Exemple simple:Fermetures JavaScript à l'intérieur des objets: quel alias devrait avoir "ceci" pour passer en fonction anonyme?

var SomeConstructor = function() { 

    this.someProperty = 'bingo'; 

    this.someMethod = function() { 

     var myObjectAlias = this; 

     $('a').click(function() { 
      alert(myObjectAlias.someProperty);     
     }); 

    } 
} 

Donc ma question est - Quel nom correct devrait avoir la variable "myObjectAlias"? Ou ce qui est utilisé dans votre code par exemple?

+0

Voir http://stackoverflow.com/questions/2698831/that-self-or-me-which-one-to-prefer-in-javascript – bobince

Répondre

6

Vous voyez beaucoup d'exemples de code.

var that = this; 

$('a').click(function() { 
     alert(that.someProperty);     
}); 

Pour ce faire; ce n'est pas grave, peu importe ce que vous voulez.

2

J'ai tendance à utiliser self dans ces cas ou _self être explicite, a le signifie de this sans les conflits, en gardant les choses simples et intuitives, au moins pour moi.

Par exemple:

self.property 
self.doSomething() 
if(self.hasPickles) { 
    self.eat(); 
} 

Il est une question de préférence bien sûr, mais la majorité des développeurs JS que j'ai parlé de trouver ce style de nommage assez intuitif, qui ne veut pas dire l'ensemble la majorité le fait, mais peu importe, n'est-ce pas? Faites ce qui fonctionne pour votre équipe :)

0

Je pense parfois qu'il est bon d'utiliser des noms significatifs, comme «forme» ou «conteneur» ou autre. En bref, les petits blocs de code ne sont pas très importants, mais dans les initialisations compliquées pour les formulaires ou les dialogues, il y a plusieurs objets "intéressants" qui bourdonnent.

0

Je préfère utiliser self pour les raisons décrites par Nick Craver.

0

sur une tangente: pensez à utiliser des prototypes pour votre constructeur:

var SomeConstructor = function() {} 
SomeConstructor.prototype = { 

    someProperty: 'bingo', 

    someMethod: function() { 
     var self = this;  
     $('a').click(function() { 
      alert(self.someProperty);     
     });  
    } 
} 

Les propriétés someProperty et SomeMethod peuvent être partagés entre tous les cas, ils fonctionnent très bien de cette façon. Chaque fois que vous avez besoin de valeurs séparées pour chaque instance, vous devez les placer dans le constructeur lui-même.

+0

merci pour votre commentaire! Je connais le prototype, mais ma question ne concerne pas cela. De votre exemple, je vois que votre choix d'alias est "self". – Roman

Questions connexes