1

似乎在 Number 对象中,数值可以直接使用“this”而不是 this.valueOf() 或类似“this.value”的东西来引用,例如:

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

为什么这是可能的(在上面的添加中直接使用“this”而不是“this.valueOf()”)?
我在号码规范中没有找到这个功能,我错过了什么吗?
此外,这种自动转换功能是否用于其他类别的对象?

4

2 回答 2

2

运算符的两个操作数都不+是字符串,因此 JavaScript 调用valueOf将 Object(Number在本例中为 a )隐式转换为原始值,以执行数字加法。引用大卫弗拉纳根的话:

如果对象有一个valueOf()返回原始值的方法,JavaScript 会将该原始值转换(如果需要)为一个数字并返回结果。

因此,this隐式转换为其原始值。

如果你做了一些愚蠢的事情,比如 override 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 回答