Javascriptで同等比較をオーバーライドすることは可能ですか?
解決策に最も近いのは、valueOf 関数を定義し、オブジェクトの前にプラスを付けて valueOf を呼び出すことです。
これは機能します。
equal(+x == +y, true);
しかし、これは失敗します。
equal(x == y, true, "why does this fail.");
これが私のテストケースです。
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.");
});
デモはこちら: http://jsfiddle.net/tWyHg/5/