Поддерживается ли toJSON в Google Chrome? - PullRequest
1 голос
/ 14 декабря 2010

при использовании JSON.stringify в Google Chrome кажется, что toJSON не вызывается?Я использую json2.js в качестве резервной копии для браузеров, которые его не поддерживают.Я думаю, поскольку Chrome поддерживает JSON, но не toJSON, json2.js вообще не используется?

Обновление
Вот пример: http://jsfiddle.net/GZzvZ/

Firefox: {"foo": "foo", "bar": "bar"}
Chrome: {"bar": "bar"}

1 Ответ

4 голосов
/ 14 декабря 2010
var t = {};

t.toJSON = function () { alert('meuh'); return (''); }
JSON.stringify(t)

Прекрасно работает для меня. Он предупреждает, поэтому вызывает метод toJSON соответствующим образом (в Chrome 8).

EDIT:

Это нормально . Ваш Foo является функцией, и объекты функций не допускаются в JSON. Я думаю, Firefox просто прощает.

Ну, на самом деле, мне интересно, я не нахожу четкого ответа в стандарте. Учитывая, что вы предоставляете toJSON () для обеспечения собственной сериализации, разрешено это или нет. Но в любом случае, это причина вашей неудачи.

Если вы отредактируете свой пример jsFiddle следующим образом, toJSON будет соответственно вызван на foo.

var obj = function(){
    this.foo = 'test'; // OK
    //this.foo = function(){ }; KO
    this.foo.toJSON = function(){
        return 'foo';  
    };

    this.bar = 'bar';
}

var ins = new obj();
var json = JSON.stringify( ins );
document.write( json );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...