2013-02-19 18 views
1

似乎在數量上的對象,數值可以直接引用使用「this」而不是this.valueOf()或類似「THIS.VALUE」,例如:Javascript Number對象的方法中的「this」如何轉換爲對象的數值?

Number.prototype.printPlusOne=function(){ 
     var tmp=this+1; 
     alert(tmp); 
} 
var n=new Number("5"); 
n.printPlusOne(); 

爲什麼這是可能的(直接使用「this」而不是上面的「this.valueOf()」)?
我在編號規範中沒有找到此功能,我錯過了什麼嗎?
此外,此自動轉換功能是否用於其他類別的對象?

回答

2

+運營商既不操作數是一個字符串,所以JavaScript調用valueOf隱式轉換對象(Number,在這種情況下, )轉換爲原始值,以執行數字加法。引述大衛那根:

如果對象具有valueOf()方法,返回原始值,JavaScript的轉換(如果有必要),該原始值的號碼,並返回結果。

因此,this被隱式轉換爲其原始值。

如果你做了一件愚蠢的像覆蓋Number.valueOf

Number.prototype.valueOf = function() { 
    return 10; 
} 

那麼你的功能將提醒來代替。

+0

謝謝,我剛剛學到了當'+'的一個操作數是一個字符串時,那麼對象的toString()隱式調用將其轉換爲字符串。 – 2013-02-19 05:01:17

1

不知道你想什麼,在這裏完成,但是:

Number.prototype.print=function(){ 
     alert(this.valueOf()); 
} 

var n=new Number("5"); 
n.print(); 
+0

我再次編輯了這個問題,我只是想知道爲什麼「this」可以用來代替「this.valueOf()」 – 2013-02-19 04:37:29

相關問題