2016-07-26 3 views
2

Pythonでは、あなたのクラスに__eq__メソッドを定義することによって、==が無効にすることができます。Javascriptで==は何をオーバーライドできますか?

Javascriptでも同様のことが可能ですか?もしそうなら、あなたはどうやってそれをしますか?

私は、==を実行したときに、同じアドレスに2つのオブジェクトが存在するかどうかを確認するために、デフォルトで(そしておそらくそれを上書きできない場合もあります)どうすれば住所を直接入手できますか?

私は長い間書いた人のコードをデバッグしようとしているので、これをすべて聞いています。私が知る限り、2つのオブジェクトは同じですが、==falseを返しています。私は理由を見つけることを試みています... ==がどこかでオーバーライドされたかどうかは疑問ですが(それは大きなコードベースで、何を検索するのかわかりません)、もしオブジェクトが複製されていれば、私が知る限り同一のものであっても、違う住所にあります。アドレスを取得する方法を知っていることは、その理論を確認するのに役立ち、問題を見つけ出すためのリードを与えてくれます。

+0

JavaScriptの演算子をオーバーライドすることはできません。 2つのオブジェクトで '=='または '==='を使用している場合、それらが同じ参照であれば 'true'を返します。 – JLRishe

+0

オブジェクトは同じですが、実際にはメモリ内の同じオブジェクトではありません。 これを再チェックする1つの方法は、値を持つプロパティを1つに追加し、それが他のものに現れるかどうかを確認することです。そうでない場合、それらは異なるオブジェクトです。 – Whothehellisthat

+0

ここに:https://stackoverflow.com/q/10539938/632951 – Pacerier

答えて

3

通常はありません。 JSでは、演算子のオーバーロードやメソッドとしての演算子を使用できません。

ので、行動に影響を与える、独自のクラスにいるあなたオーバーライド、内部toStringまたはvalueOfを呼び出し、特定の演算子があります。

+1

興味深い。これは '=='に当てはまりますか? – ArtOfWarfare

+0

@ArtOfWarfare時には。 '==との比較のために異なるオペランドの型対が強制的にどのように強制されるかを説明する[Abstract Equality Comparison](http://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison)を参照してください'は時々' valueOf'や 'toString'を呼び出す操作[ToPrimitive](http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive)を使います。しかし、オブジェクトとオブジェクトの比較では、 '=='はアイデンティティの比較を直接行います(「これらのオブジェクトは本当に同じオブジェクトですか?」)。 – apsillers

+0

@ArtOfWarfare時には、アピラーが精緻化しています。私は仕様を調べて、どのオペレータが行うかを見る必要がありますが、それは仕事中には多少広範囲です(ごめんなさい)。 – ssube

0

いいえ、JavaScriptでは演算子を直接オーバーライドすることはできません。

関連する問題