我想定义一个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()代替。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top