Javascript 作为原型的函数的子函数
我试图用一个有两个子函数的函数来扩展Number对象。它工作得很好,只是子函数不能通过它访问Number对象值,我不知道如何访问它,或者这是否可行 我的代码看起来像这样Javascript 作为原型的函数的子函数,javascript,prototype,extending,Javascript,Prototype,Extending,我试图用一个有两个子函数的函数来扩展Number对象。它工作得很好,只是子函数不能通过它访问Number对象值,我不知道如何访问它,或者这是否可行 我的代码看起来像这样 var currency = function(prefix) { var val = this.toString(); prefix = prefix || 'R$'; if(val > 99999) { val = val.replace(/(\d+)(\d{3})(\d{2}
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();”行中,因为它引用的是函数本身,而不是Number对象的值
有没有办法做到这一点
第二个问题:为什么我需要把()放在12345这个数字周围才能工作?我没有扩展number对象,12345不是它的一个实例
提前感谢它看起来可能没有您试图做的那么好,但是您可以像这样将这三种方法直接添加到原型中
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;
};
var currencyCents = function() {
var val = this.currency();
return val == 0 ? '00' : val.substring(val.length - 2);
};
var currencyInteger = function() {
var val = this.currency();
return val == 0 ? '0' : val.substring(0, val.length - 2);
};
Number.prototype.currency = currency;
Number.prototype.currencyCents = currencyCents;
Number.prototype.currencyInteger = currencyInteger;
alert((12345).currency()); // R$ 123,45
alert((12345).currencyCents()); // 45
alert((12345).currencyInteger()); // R$ 123,
现在是你的第二个问题
为什么我需要在数字12345周围加上()
这个能起作用吗?我没有扩展number对象,12345也不是
举个例子
我发现这个问题要棘手得多。我从中找到了答案
Nick Craver对的回答-这是因为数字可以有小数,所以在数字周围加上括号,以明确句点是函数调用的,而不是数字的小数部分。您的
cents
和integer
函数是curreny
对象的直接属性(是的,函数也是对象)。它们没有在数字
原型上声明,因此它们没有访问此
的权限。12345中没有分钱,只是为了让您know@Ibu是的,有…我正在解析一个XML,其中123,45表示为12345@JosephSilber我明白,但是没有办法访问“父”属性?