2016-09-07 13 views
5

は、開発ツールのコンソールでこれを試してみてください:getBoundingClientRectがJSON.toStringifyでシリアル化されないのはなぜですか?

JSON.stringify(document.body.getBoundingClientRect()) 

出力ではなく、賢明な何かを、{}です。

アイデア?

+0

原因:https://developer.mozilla.org/en-US/docs/Mozilla/Tech/ XPCOM/Reference/Interface/nsIDOMClientRect、jsオブジェクトではありません –

+0

ええ、そのtypeofオブジェクト – SuperUberDuper

+0

typeofはjsオブジェクトだけでなく、ほとんどの環境オブジェクトに対しても "オブジェクト"を返します。私は仕様のこの部分を覚えていますが、プルーフリンクを検索するのは怠惰です) –

答えて

2

JSON.stringifyは、toJSONというメソッドを内部的に使用します。

あなたのオブジェクトのためか、あなたのケースでそれを指定することができ、それを上書き:

textRectangleを返しgetBoundingClientRect
ClientRect.prototype.toJSON = function(){ return { top: this.top } } 

JSON.stringify(document.body.getBoundingClientRect()) 

"{"top":-583}" 
+0

お金のパッチ、素敵! – SuperUberDuper

+0

あなたはより建設的になるでしょうか? :) – Caramiriel

+0

@ Caramiriel若干の経験豊富なjs開発者が知っていることは、ネイティブプロトタイプの変更は_一般的に非常に悪いことです。それはtodolistより大きいアプリケーションのためのタイムボーンのようなものです。関連する質問:http://stackoverflow.com/questions/14034180/why-is-extending-native-objects-a-bad-practice –

関連する問題