Loop infinito ao converter o objeto eliminável em objeto JavaScript simples

Seguindo instruções dadas nodocumentação, Tenho o seguinte modelo de visualização:

var newContactViewModel = function () {
    var self = this;

    self.Name = ko.observable();
    self.Address = ko.observable();
    self.City = ko.observable();
    self.State = ko.observable();
    self.PostalCode = ko.observable();

    self.Save = function () {
        $.ajax({
            type: "POST",
            url: "/contact",
            data: ko.toJS(self), //infinite loop here
            success: state.OnSaved
        });
    };
};

Quando oself.Save método é chamado, ocorre um loop infinito. O Chrome realmente informa o erro como:

Não Range RangeError: tamanho máximo da pilha de chamadas excedido

Se eu usarko.mapping.toJS(self) ao invés deko.toJS(self), então eu recebo um erro um pouco mais revelador, mas não há "mensagem" de erro real:

Se eu trocarko.toJS(self) com algo parecido{ Name: self.Name(), Address: self.Address() /* etc */ }então tudo funciona bem. Parece que está tentando converter oSave método e chamando novamente o método como resultado.

Há um bug no KnockoutJS ou há um problema quando estou usando. Eu prefiro o último. Pensamentos?

questionAnswers(1)

yourAnswerToTheQuestion