2016-07-26 20 views
2

In Python ist es möglich zu überschreiben, was == tut, indem Sie eine __eq__ Methode für Ihre Klasse definieren.Können Sie überschreiben, was == in Javascript tut?

Ist es möglich, etwas ähnliches in Javascript zu tun? Wenn ja, wie machst du das?

Mein Verständnis ist, dass, standardmäßig (und vielleicht immer, wenn Sie es nicht überschreiben können), Javascript nur überprüft, ob zwei Objekte an der gleichen Adresse befinden, wenn Sie eine == tun. Wie kann ich die Adresse direkt bekommen?

Ich frage all dies, weil ich versuche, Code zu debuggen jemand, der schon lange weg ist schrieb. Soweit ich das beurteilen kann, sind zwei Objekte identisch, und == gibt false zurück. Ich versuche herauszufinden, warum ... Ich frage mich, ob vielleicht == irgendwo außer Kraft gesetzt wurde (aber es ist eine große Codebase und ich weiß nicht, wonach ich suchen soll) oder ob oder ob das Objekt dupliziert wurde, also existieren sie an verschiedenen Adressen, obwohl ich, soweit ich weiß, identisch bin. Zu wissen, wie man die Adresse bekommt, würde helfen, diese Theorie zu bestätigen und mir einen Anhaltspunkt zu geben, das Problem aufzuspüren.

+0

Es ist nicht möglich, Operatoren in JavaScript zu überschreiben. Wenn Sie für zwei Objekte '==' oder '===' verwenden, wird 'true' zurückgegeben, wenn sie dieselbe Referenz sind. – JLRishe

+0

Die Objekte _look_ das gleiche, aber sind nicht eigentlich das gleiche Objekt im Speicher. Eine Möglichkeit, dies zu überprüfen, besteht darin, eine Eigenschaft mit einem Wert zu einem Wert hinzuzufügen und festzustellen, ob sie auf der anderen Seite erscheint. Wenn nicht, sind sie unterschiedliche Objekte. – Whothehellisthat

+0

Hier: https://stackoverflow.com/q/10539938/632951 – Pacerier

Antwort

3

Nicht typisch. JS erlaubt kein Überladen von Operatoren oder Operatoren als Methoden.

Es gibt bestimmte Operatoren, die intern toString oder valueOf nennen, die Sie können Überschreibung auf Ihre eigenen Klassen, also das Verhalten zu beeinflussen.

+1

Interessant. Gilt das für '=='? – ArtOfWarfare

+0

@ArtOfWarfare Manchmal. Siehe [Abstract Equality Comparison] (http://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison), der erklärt, wie verschiedene Operandentyp-Paarungen für den Vergleich mit '== erzwungen werden ', die manchmal die Operation [ToPrimitive] (http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive) verwendet, die manchmal" valueOf "oder" toString "aufruft. Für einen Vergleich von Objekt zu Objekt bedeutet '==' jedoch einen direkten Identitätsvergleich ("Sind diese Objekte wirklich das selbe Objekt?") – apsillers

+0

@ArtOfWarfare manchmal, wie Apsillers ausgearbeitet haben. Ich muss durch die Spezifikation gehen und sehen, welche Betreiber tun, aber das ist ein bisschen umfangreich zu tun, während der Arbeit (Entschuldigung). – ssube

0

Nein, es ist nicht möglich, alle Operatoren direkt in JavaScript zu überschreiben.