2013-10-08 1 views
3

Je suis dans une situation où il est nécessaire de pouvoir appeler une méthode sur un objet par deux noms différents, et le plus court chemin que j'ai trouvé de le faire est comme ceci:La meilleure façon de faire un alias de propriété?

var c = { 
    a : function() {console.log("called a!");}. 
    b : function() {this.a();} 
}; 

J'étais espérant plutôt il y avait quelque chose comme ceci:

var c = { 
    a,b : function() {console.log("called a!");}. 
}; 

Mais mes recherches jusqu'ici n'ont pas eu lieu sur quelque chose comme ça. Y a-t-il une meilleure façon?

Répondre

2

Je crains qu'il n'y ait pas de bonne façon de le faire en JS avec une seule déclaration, mais vous pouvez l'avoir fait à l'intérieur d'une fermeture, qui est ce que la plupart JS modules font de toute façon.

var c = (function() { 
    var a = function() {console.log("called a!");}; 
    return { 
     'a': a, 
     'b': a 
    }; 
}()); 
+0

C'est parfait. Je n'avais aucune idée que je pouvais faire ça. En fait, j'aimerais vraiment en savoir plus, mais je ne sais pas comment ... savez-vous quel est le terme utilisé pour utiliser l'instruction return en relation avec une série d'associations méthode/propriété séparées par des virgules dans JS? ? – Aerovistae

+0

@Aerovistae: C'est juste une fonction retournant un objet avec des propriétés. Bien que cela semble être plus long que votre "chemin le plus court". – user2736012

6

Vous pouvez attribuer b plus tard:

var c = { 
    a : function() {console.log("called a!");}. 
}; 

c.b = c.a; 
+0

Court et soigné, mais probablement pas le schéma d'organisation optimal. tendre à des alternatives. – Aerovistae

2

vous pouvez utiliser une fonction constructeur

function d(){ 
    this.a = this.b = function() {console.log("to c or not to c?");}; 
} 

c = new d(); 

DEMO fiddle.

+1

plutôt 'this.a = this.b = function() {console.log (" appelé un! ");}' Oui? –

+0

Oui vérifier l'édition, thnx. –

+1

Ma solution préférée jusqu'à présent. Précis et encapsulé. –

1
var c = new function() { 
    this.a = this.b = function() {console.log("called a!");}. 
}; 

Bien que cela puisse ressembler à cela, c n'est pas référence à une fonction, mais plutôt un nouvel objet avec les a et b propriétés.

De plus, il n'y a pas d'encombrement d'espace de noms supplémentaire.

Si vous en avez besoin pour créer plusieurs objets, la version nommée a plus de sens.

Questions connexes