我正在尝试使用具有两个子功能的函数来扩展 Number 对象。它工作正常,除了子函数无法通过 this 访问 Number 对象值,而且我不知道如何访问它或者这是否可能。
我的代码看起来像这样
var currency = function(prefix) {
var val = this.toString();
prefix = prefix || 'R$';
if(val > 99999) {
val = val.replace(/(\d+)(\d{3})(\d{2})$/,prefix + " $1.$2,$3");
} else if(val == 0) {
val = prefix + ' 0,00';
} else {
val = val.replace(/(\d+)(\d{2})$/, prefix + " $1,$2");
}
return val;
};
currency.cents = function() {
var val = this.toString();
return val == 0 ? '00' : val.substring(val.length - 2);
};
currency.integer = function() {
var val = this.toString();
return val == 0 ? '0' : val.substring(0, val.length - 2);
};
Number.prototype.currency = currency;
alert((12345).currency()); // "R$ 123,45"
alert((12345).currency.cents()); // return " }"
问题在于“var val = this.toString();”这一行 因为 this 指的是函数本身,而不是 Number 对象的值。
有没有办法做到这一点?
第二个问题:为什么我需要在数字 12345 周围加上 ( ) 才能工作?我没有扩展数字对象并且 12345 不是它的一个实例?
提前致谢