你如何定义对象是如何在JavaScript中比较
-
22-07-2019 - |
题
我想定义一个JavaScript类,富。
Foo = function(value){
this.value = value;
};
我将创建我的富的 “实例”:
foo1 = new Foo(1);
foo2 = new Foo(1);
和我希望我的Foo的实例是彼此使用标准可比==等于运算符:
foo1 == foo2; // this should be true
我无法找到一个方法来做到这一点。我认为我到的东西与valueOf()
功能,但是,当所述比较的一个侧面是一个原始的,未与上述其中两个是类型的对象,这是唯一有用的。
我错过了非常简单的一个类似于Ruby的
def ==(obj); end
解决方案
JavaScript没有操作符重载。请参见讨论覆盖你的问题。
其他提示
不在一个干净的方式...
Foo = function (value){
this.value = value;
};
覆盖自己的对象的功能的toString:
Foo.prototype.toString = function( ){ return this.value.toString(); }
创建两个测试对象:
foo1 = new Foo(1);
foo2 = new Foo(1);
如果你的对象的值是字符串或数字,可以让JavaScript引擎将它们添加到一个空字符串到你的对象转换为字符串:
alert( ""+foo1 === ""+foo2 ); //Works for strings and numbers
同样的事情,但清洁器:
alert( foo1.toString() === foo2.toString() ); //Works for strings and numbers
如果你的对象的值仅是数字,你可以用一元+操作对象转换成一个数字:
alert( +foo1 === +foo2 ); //Works for numbers
但是,我建议你都定义如上了toString和也是一个等于:
Foo.prototype.equals=function(b){return this.toString() === b.toString();}
和然后调用它是这样的:
alert ( foo1.equals(foo2) );
因为现在已经定义的toString可以:
alert(foo1); // Alerts the value of foo1 instead of "[Object object]"
alert("foo1: " + foo1); // Alerts "foo1: 1". Useful when debugging.
我不认为这是可能的使用JavaScript。你必须例如写自己的功能isEqual()
JavaScript是在这方面像其同名的Java:无操作符重载。使用自定义的方法等equals()
代替。
不隶属于 StackOverflow