2015-07-14 3 views
0

Я что-то упустил? У меня есть другие прототипы в этом же файле, и они работают так, как ожидалось.Прототип неправильной функции

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; 
} 

Мои 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) 
+0

shoudn't быть это путь? Number.prototype.toPureNumber = function (number) {...} – gal007

+0

Вы уже вызвали 'initialiser()'? – Bergi

+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

следующие работы:

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.

+0

Если бы вы прочитали мой комментарий выше, есть еще два прототипа в функции инициализатора, которая вызывается в событии загрузки документа. Остальные два прототипа работают. –

Смежные вопросы