Question

Je veux définir une classe JavaScript, Foo.

Foo = function(value){
    this.value = value;
};

Je créerai des "instances". de mon foo:

foo1 = new Foo(1);
foo2 = new Foo(1);

et je veux que mes instances de Foo soient comparables les unes aux autres en utilisant l'opérateur standard == d'égalité:

foo1 == foo2;      // this should be true

Je ne peux pas trouver un moyen de le faire. Je pensais utiliser quelque chose avec la fonction valueOf () , mais cela n'est utile que lorsqu'un côté de la comparaison est une primitive, et non comme ci-dessus, où les deux sont de type objet.

Ai-je oublié quelque chose de très simple qui ressemble à Ruby

def ==(obj); end
Était-ce utile?

La solution

JavaScript n'a pas de surcharge d'opérateur. Consultez cette discussion pour répondre à votre question.

Autres conseils

Pas de façon propre ...

Foo = function (value){
    this.value = value;
};

Remplacez la fonction toString de votre propre objet:

Foo.prototype.toString = function( ){ return this.value.toString(); }

Création de deux objets de test:

foo1 = new Foo(1);
foo2 = new Foo(1);

Si les valeurs de vos objets sont des chaînes ou des nombres, vous pouvez avoir le moteur JavaScript pour convertir vos objets en chaîne en les ajoutant à une chaîne vide:

alert( ""+foo1 === ""+foo2 ); //Works for strings and numbers

Même chose mais plus propre:

alert( foo1.toString() === foo2.toString() ); //Works for strings and numbers

Si les valeurs de vos objets sont uniquement numériques, vous pouvez utiliser l'opérateur unaire + pour convertir l'objet en un nombre:

alert( +foo1 === +foo2 ); //Works for numbers

Cependant, je vous recommande de définir à la fois le toString comme ci-dessus et un égal:

Foo.prototype.equals=function(b){return this.toString() === b.toString();}

Et appelez ça comme ça:

alert ( foo1.equals(foo2) );

Depuis que vous avez défini toString, vous pouvez:

alert(foo1); // Alerts the value of foo1 instead of "[Object object]"
alert("foo1: " + foo1); // Alerts "foo1: 1". Useful when debugging. 

Je ne pense pas que ce soit possible en utilisant javascript. Vous devez écrire votre propre fonction, par exemple. isEqual ()

JavaScript est à cet égard comme son homonyme Java: Pas de surcharge de l'opérateur. Utilisez une méthode personnalisée telle que equals () à la place.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top