原型不是有效的功能

时间:2015-07-14 21:00:37

标签: javascript typescript prototype

我错过了什么吗?我在同一个文件中有其他原型,它们按预期工作。

module StACS    
    export module NumberPrototypes {
        export function initializer() {
            // OTHER PROTOTYPES REMOVED FOR SPACE

            Number.prototype.toPureNumber = function(): number {
                var self = this;
                return parseFloat(self.toString().replace(/[^\d.-]/g, ''));
            }
        }
    }
}

interface Number {
    toMoney(decimals?: number, decimalCharacter?: string, thousandsCharacter?: string): string;
    toPercentage(decimals?: number, showSymbol?: boolean): string;
    toPureNumber(): number; 
}

My Observable:

productPrice: KnockoutObservable<number>:
productsTabView.productModel().productPrice()

结果:

"$25.00"

当我尝试这样做时:

productsTabView.productModel().productPrice().toPureNumber()

我收到以下错误:

Uncaught TypeError: productsTabView.productModel(...).productPrice(...).toPureNumber is not a function
    at <anonymous>:2:47
    at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
    at Object.InjectedScript.evaluate (<anonymous>:694:21)

2 个答案:

答案 0 :(得分:0)

好的,我终于弄明白了我的问题。可悲的是,这里的任何人都不会想到因为你错过了一个关键部分。即使将KO Observable设置为数字,我也会附加一个自定义扩展器。此扩展程序执行格式化并返回字符串,而不是数字。

这就是我得到这个的原因:

productsTabView.productModel().productPrice()
"$0.00"

我将原型改为:

String.prototype.toPureNumber = function (): number {
    var self = this;
    return parseFloat(self.toString().replace(/[^\d.-]/g, ''));
}

现在这可以按预期工作:

productsTabView.productModel().productPrice().toPureNumber()
0

答案 1 :(得分:-1)

以下作品:

interface Number {
    toPureNumber(): number; 
}

Number.prototype.toPureNumber = function(): number {
    var self = this;
    return parseFloat(self.toString().replace(/[^\d.-]/g, ''));
}

var foo = 123.3;
var bar = foo.toPureNumber();
console.log(bar);

FIX

致电initializer