2012-04-26 40 views
16

我有一個具有多個成員的自定義類。我需要將它們相互比較。 javascript讓我寫:如何在javascript中自定義對象執行小於/大於比較

var a = new MyType(1); 
var b = new MyType(2); 
if (a < b) { ... 

但我不明白邏輯比較的行爲。有人可以解釋上述代碼中<比較的語義嗎?有沒有辦法控制發生的事情,以便我可以得到正確的行爲?我知道我可以爲這個類寫一個比較方法,但是由於javascript讓我寫,所以我想知道它在做什麼。

謝謝。

回答

24

您需要定義一個.valueOf方法返回一個原始的,可用於比較:

function MyType(value){ 
    this.value = value; 
} 

MyType.prototype.valueOf = function() { 
    return this.value; 
}; 

var a = new MyType(3), 
    b = new MyType(5); 

a < b 
true 
a > b 
false 
a >= b 
false 
b < a 
false 
b > a 
true 

如果不定義它,該字符串"[object Object]"用於比較:

"[object Object]" < "[object Object]" 
false 
"[object Object]" > "[object Object]" 
false 
"[object Object]" >= "[object Object]" 
true 
"[object Object]" <= "[object Object]" 
true 
+0

哇,這就像一個JavaScript的IComparable接口。 – 2012-04-26 18:52:08

+1

@Jay當比較對象的相等性('==','===')時,它總會比較引用(2個操作數是否指向內存中相同的確切對象)。你需要定義類似'.isEqual'的方法,並且通常調用它'a.isEqual(b)' – Esailija 2012-04-26 19:00:45

+0

謝謝。那很完美。儘管如此,它不會使==或===工作。奇怪的是,我無法在網絡上的任何地方找到這個解決方案。 – drdwilcox 2012-04-26 20:00:09

相關問題