Überschreiben Sie den Äquivalenzvergleich in Javascript

Ist es möglich, den Äquivalenzvergleich in Javascript zu überschreiben?

Am nächsten an einer Lösung ist es, die valueOf-Funktion zu definieren und valueOf mit einem Plus vor dem Objekt aufzurufen.

Das funktioniert.

<code>equal(+x == +y, true);
</code>

Das scheitert aber.

<code>equal(x == y, true, "why does this fail.");
</code>

Hier sind meine Testfälle.

<code>var Obj = function (val) {
    this.value = val;
};
Obj.prototype.toString = function () {
    return this.value;
};
Obj.prototype.valueOf = function () {
    return this.value;
};
var x = new Obj(42);
var y = new Obj(42);
var z = new Obj(10);
test("Comparing custom objects", function () {
    equal(x >= y, true);
    equal(x <= y, true);
    equal(x >= z, true);
    equal(y >= z, true);
    equal(x.toString(), y.toString());
    equal(+x == +y, true);
    equal(x == y, true, "why does this fails.");
});
</code>

Demo hier:http://jsfiddle.net/tWyHg/5/

Antworten auf die Frage(4)

Ihre Antwort auf die Frage