我们都知道,在javascript中:
1+1
2
new Number(1) + new Number(1)
2
那么问题来了,比如我想让1+1 = 6或者等于任何我想等于的数,该怎么做呢,查了下文档,好像没找到,某歌某度也没找到相关的资料,只能自己从Number类型下功夫,发现其原型上应该有相关 的方法,话不多说,直接撸码。
Number.prototype.valueOf = function(){
return 3
}
nem Number(1) + new Number(1)
6
如上,我们可以看到结果是我们想要的,所以可以在原型上设置任何值,其原理就是覆盖Number的内置方法。但是上面的方法有问题吗?有,比如下面这个例子:
[new Number(1)].join()
"1"
我们发现这个方法并没有返回我们预定的3,那3跑哪去了,其实这个方法并没有执行我们上面的valueOf方法,我们可以继续在原型上下功夫,代码如下:
Number.prototype.toString = function(){
return 3
}
[new Number(1)].join()
"3"
这样就可以了,是不是挺有意思的。