IE8/Firefox3.5/Chrome4/Safari4/Opera10ではこの方法が実装されています。使用法は非常に簡単です:
var str = '{"name ":"jack"}';
var json = JSON.parse(str);
が使用されます。このメソッドを実装するブラウザでは「jack」がポップアップ表示されます。
JSON を解析するメソッドを Object.prototype に追加する場合 (これを実行してネイティブ オブジェクトを汚染することに強く反対する人もいるかもしれません。これは単に議論のためです)
Object.prototype.parseJSON = function () {
return JSON.parse(this); }
すべてのオブジェクトは Object のメソッドを継承するため、この時点でそれらを直接使用できます。
var str = '{"name":"jack"}';
var json = str.parseJSON(); (json.name);
str.parseJSON()、この内部の parseJSON は str を指します。現時点では、すべてのブラウザが正常に解析できるわけではありません。
IE8/Firefox/Safari/Opera では引き続き「ジャック」が表示されますが、Chrome では「不正アクセスが捕捉されませんでした」というエラーが報告されます。
このように書いた場合、なぜ Chrome はそれをサポートしないのですか? 2 つのメソッドを比較すると、JSON.parse に渡されるパラメータの 1 つは文字列 str で、もう 1 つは this です。両者に違いはないように思えますが?
str.parseJSON() の場合、parseJSON 内の this は str を指す必要があります。 parseJSON メソッドを変更します:
コードをコピーします
コードは次のとおりです: Object.prototype。 parseJSON = function () {
alert(typeof this);
return JSON.parse(this);
再実行すると、parseJSON がポップすることがわかります。上のオブジェクト、おそらくこれが違いです。文字列を直接 new することで明らかな効果を確認できます
コードをコピーします
コードは次のとおりです: var js = JSON.parse(new String('{"name":"jack"}')); alert(js.name);
Chrome を除く上記のコードエラーが発生しても、他のブラウザは正常に動作します。
基本的に結論は次のとおりです。
Chrome では、JSON.parse の最初のパラメータはオブジェクトではなく文字列のみにすることができます (新しい String メソッドはサポートされていないことを含みます)
上記に戻って、 give Object.prototype は、json を解析するためのメソッドを追加します。すべてのブラウザーと互換性を持たせたい場合は、次のように記述できます。 >
コードは次のとおりです。
Object.prototype.parseJSON = function () {
return JSON.parse(this.toString())