【发布时间】:2012-05-19 09:01:32
【问题描述】:
是否可以覆盖 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.");
});
【问题讨论】:
-
你到底想在这里实现什么?
-
@ElliotBonneville 我正在用 javascript 创建分数对象。
-
分数对象是什么样的?我们可以看到一些示例输入吗?或者也许我只是误解了你想要做什么......
-
@ElliotBonneville 基本上我试图让用户使用直接比较而不是在对象上调用比较函数。这很奇怪,因为 >、=、
-
@ElliotBonneville 这是我使用这些技术创建的。 Ratio.js github.com/LarryBattle/Ratio.js
标签: javascript operator-overloading qunit