2011-04-11 20 views
7

He creado objetos nuevos con Dojo.declare. Cómo sobrecargar operador == para objetos?Cómo sobrecargar igualdad de operador para objetos de JavaScript

+0

Posible duplicado de [Sobrecarga de operadores aritméticos en JavaScript?] (Http://stackoverflow.com/questions/1634341/overloading-arithmetic-operators-in-javascript) –

+0

Aquí: https://stackoverflow.com/q/ 10539938/632951 – Pacerier

Respuesta

9

Usted no puede sobrecargar ==, pero == tiene una implícita .toString() llamada, por lo que cualquier .toString() retornos le permitirá a la sobrecarga efectiva == (un poco):

function foo(){} 
foo.prototype.toString = function(){ return 42; } 

var x = new foo(); 
x == 42; // true 

cuanto a cómo hacer esto en el Dojo, No uso Dojo, lo siento, pero la esencia es que obtienes una referencia a cualquier objeto que se crea y agrega thatObject.prototype.toString como en mi ejemplo.

+5

Para un objeto y un primitivo, tal vez. Aunque 'valueOf' es lo que desea anular. Pero no para dos objetos. 'new String ('x')! = new String ('x')' a pesar del hecho de que los dos métodos 'toString' devuelven el mismo valor. –

+1

@Mike - meh. Tienes razón. La igualdad de objeto no se aplica porque solo hay una verificación en la dirección de memoria ... –

+1

, incluso para la comparación de objeto y primitiva, se dará prioridad a la implementación de 'valueOf '. –

6

No puede. JavaScript no admite la sobrecarga del operador.

3

No se puede en Java/ECMAscript. Solo puede sobrecargar a los operadores que usan ExtendScript desde Adobe. Ver this example. También vea esto blog entry (pro), o this (contra).

+0

Esto parece aplicarse solo a ActionScript. –

+0

@Joachim Sauer: wtf? ¡Eso es lo que dije esta respuesta! Agregando algunos enlaces para mostrar que hay discusión sobre la sobrecarga del operador para ECMAscript. – KooiInc

+0

Su redacción anterior no dejó esto en claro. –

Cuestiones relacionadas