1

Numberオブジェクトでは、this.valueOf()の代わりに「this」または「this.value」のようなものを使用して数値を直接参照できるようです。次に例を示します。

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

そして、なぜこれが可能ですか(上記の追加で「this.valueOf()」の代わりに「this」を直接使用する)?
番号の仕様でこの機能が見つかりませんでした。何か見落としていましたか?
さらに、この自動変換機能は他のクラスのオブジェクトで使用されていますか?

4

2 に答える 2

2

演算子のどちらのオペランドも+文字列ではないため、JavaScriptは、数値の加算を実行するためにvalueOf、オブジェクト(この場合はa)を暗黙的にプリミティブ値に変換するために呼び出します。Numberデビッドフラナガンの引用:

オブジェクトにvalueOf()プリミティブ値を返すメソッドがある場合、JavaScriptは(必要に応じて)そのプリミティブ値を数値に変換し、結果を返します。

したがって、thisは暗黙的にそのプリミティブ値に変換されます。

オーバーライドのようなばかげたことをした場合Number.valueOf

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

その場合、関数は代わりに11を警告します。

于 2013-02-19T04:41:12.243 に答える
1

ここで何を達成しようとしているのかわかりませんが、次のようになります。

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

var n=new Number("5");
n.print();
于 2013-02-19T03:42:07.723 に答える