2011-04-11 71 views
7

我已經使用Dojo.declare創建了新對象。如何重載運算符==的對象?如何爲JavaScript對象重載運算符等於

+0

可能重複[在JavaScript中重載算術運算符?](http://stackoverflow.com/questions/1634341/overloading-arithmetic-arrators-in-javascript) – 2015-12-18 00:01:42

+0

這裏:https://stackoverflow.com/q/ 10539938/632951 – Pacerier 2017-09-19 00:12:47

回答

9

你不能重載==,但==有一個隱.toString()通話,所以無論.toString()回報將讓你有效超載==(有點):

function foo(){} 
foo.prototype.toString = function(){ return 42; } 

var x = new foo(); 
x == 42; // true 

至於如何做到這一點的道場,我不使用道場,對不起,但要點是你得到一個任何對象創建的參考,並添加thatObject.prototype.toString如我的例子。

+5

對於一個對象和一個原語,也許。雖然'valueOf'是你想要重寫的。但不是兩個對象。 'new String('x')!= new String('x')'儘管兩個對象的toString方法都返回相同的值。 – 2011-04-11 15:53:27

+1

@Mike - 嗯。你是對的。對象相等不適用,因爲只有內存地址檢查... – 2011-04-11 16:28:09

+1

即使對象和原始比較,優先級將賦予'valueOf'實現。 – 2015-08-07 23:13:20

6

你不能。 JavaScript不支持運算符重載。

3

你不能在Java/ECMAscript中。您只能使用Adobe的ExtendScript重載操作符。見this example。另請參閱blog entry(pro)或this(contra)。

+0

這似乎只適用於ActionScript。 – 2011-04-11 09:23:10

+0

@Joachim Sauer:wtf?這就是我說的這個答案!添加一些鏈接以顯示ECMAscript的操作符重載討論。 – KooiInc 2011-04-11 09:27:07

+0

你之前的措辭沒有說清楚。 – 2011-04-11 09:35:04