Javascript 作为原型的函数的子函数

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}

我试图用一个有两个子函数的函数来扩展Number对象。它工作得很好,只是子函数不能通过它访问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();”行中,因为它引用的是函数本身,而不是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我明白,但是没有办法访问“父”属性?