2017-01-20 15 views
2

以下はスローされませんChromeでDataCloneErrorDOMException`Math`は構造化クローニングアルゴリズムごとにクローン可能ですか?

self.postMessage(Math, '*'); 

これはstructured cloning algorithmあたりの期待される動作ですか?

それは(失敗の現在の不足が複製可能(無効が)キーパスキーとしてMathを検討するため、テストリード)ので、私は好奇心旺盛...

+0

FFでエラーが発生します。正確な参照はありませんが、クロムバグに投票します。 (しかし、私はすべてのオブジェクトは、非クローン可能な関数を保持するプロパティを持つ)。 – Kaiido

+0

FFとChromeの間に誰が問題があるのか​​まだ分かりませんが、同じように動作する他のオブジェクトを作成できます: 'var Beth = Object.create({v:1234、func:_ => {}} ) '。しかし今度は、FFとクロムの両方がそれを(空のオブジェクトとして)送信することができます。おそらくクロムは数学をこのように作成しますが、FFはそうではありません。 – Kaiido

答えて

2

Mathの機能のプロパティだったIndexedDB testで使用されています(herehereを参照)、それらはStructuredCloneによってスキップされます。それは「自分の財産」ではありませんので、同様に無視されるように、上記のコメントでBeth例で

Object.getOwnPropertyDescriptor(Math, 'abs').enumerable 

は、funcはプロトタイプで終わります。

FFのバグのようです。

+1

私の深い調査の欠如は私には尋ねることができますが、ホストオブジェクトやむしろいくつかのカテゴリについては何もありません。 'Math'のような組み込みのJavaScriptオブジェクトは、通常はクローン化されません。 –

+0

"プラットフォームオブジェクト"が当てはまるかどうか混乱しましたが、JavaScript仕様で定義されたオブジェクトはStructuredClone抽象操作で直接処理されていました。その中に「数学」が定義されている。 –

+0

「エキゾチックオブジェクト」の特殊な処理(ECMA-262の実装では、エミュレートされた関数オブジェクトがエミュレートされた関数オブジェクトの評価をサポートしている可能性があるという事実によって、しかし、「数学」は関数ではないので、http://www.ecma-international.org/ecma-262/6.0/indexにそのような型としてリストされている「数学」は見当たらない.html#sec-built-in-exotic-object-internal-methods-and-slotsについては、それらは適用されないことがわかります。 –

関連する問題