我的目标是为Number对象添加方法,这将改变number的值.像这样
var a = 10; a.add(5); console.log(a); // Return 15
有可能,或唯一的方法
Number.prototype.add = function(n) { return this.valueOf() + n; } var a = 10; a = a.add(5);
谢谢
问题是在JS中,原始值是不可变的.
从理论上讲,可以使用数字对象并改变其[[NumberData]]
内部插槽.但是,ECMAScript无法做到这一点.
相反,考虑返回一个对象,当被强制转换为数字时valueOf
,返回所需的数字,例如
function MyNumber(n) { this.number = n; } MyNumber.prototype.add = function(n) { this.number += n; return this; }; MyNumber.prototype.valueOf = function() { return this.number; }; var n = new MyNumber(10); n.add(5); n + 0; // 15