Мне интересно, есть ли причина предпочитать функцию прототипа/функцию viewModel над другой.JavaScript - Функция прототипа против функции ViewModel?
Допустим, вы хотели, чтобы представить целое 1234
как значение денег как 12.34€
Что я сделал, создать функцию прототипа на Number
объекта:
Number.localeSeparator = 1.1.toLocaleString().substr(1, 1);
Number.prototype.centToEuro = function (separator_string) {
if (!separator_string) {
separator_string = Number.localeSeparator;
}
return (this/100).toFixed(2).replace(".", separator_string) + "€";
}
var vm = {myMoney: ko.observable(1234)};
ko.applyBindings(vm);
Это сделал привязку данных довольно легко , потому что все, что мне нужно было сделать на вид, было следующим:
<div data-bind="text: myMoney().centToEuro()"></div>
Но вместо прототипа functio п, я мог бы также создать функцию ViewModel с почти таким же кодом, например, так:
var vm = {
myMoney: ko.observable(1234),
localeSeparator: 1.1.toLocaleString().substr(1, 1),
centToEuro: function (value_int, separator_string) {
if (!separator_string) {
separator_string = vm.localeSeparator;
}
return (value_int/100).toFixed(2).replace(".", separator_string) + "€";
}
}
ko.applyBindings(vm);
Используется в представлении, это будет выглядеть следующим образом:
<div data-bind="text: centToEuro(myMoney())"></div>
Как вы можете сказать, два Строки HTML почти точно такой же длины и только изменяются в подходе. Итак, вопрос в том, какой подход предпочитает?
Хорошо, имеет смысл. И если кто-то хотел использовать пользовательские функции для произвольных чисел? Может ли быть сделано общее утверждение по этому поводу или зависит от варианта использования, следует ли продлить прототип? – jaySon
В этом случае это все еще считается [плохая идея] (http://stackoverflow.com/q/10197174/1048572) (см. Также ссылки в комментариях там). – Bergi