* 仕様書

[REFS[
- [1] [CITE[Web IDL (Second Edition)]] ([TIME[2015-05-27 01:29:33 +09:00]] 版) <http://heycam.github.io/webidl/#idl-objects>
]REFS]

* 意味

[2] [[プラットフォームオブジェクト]]は、
[FIG(list)[
- [3] [[非コールバックインターフェイス]]を[[実装]]する[[オブジェクト]]
- [4] [[Web IDL]] [CODE(IDL)@en[[[DOMException]]]] を表す[[オブジェクト]]
- [5] [[Web IDL]] [[配列オブジェクト]] ([[プラットフォーム配列オブジェクト]])
]FIG]
... です [SRC[>>1]]。

;; [7] [[プラットフォームオブジェクト]]かどうかは、ある実装についての区分となります。
例えば [[Webブラウザー]]が読み込んだページが [[JavaScript]] で [[DOM]]
を実装している場合は、その [[JavaScript]] が実装する [CODE(DOMi)@en[[[Node]]]]
[[オブジェクト]]は、その [[JavaScript]] ライブラリーにとっては[[プラットフォームオブジェクト]]ですが、
[[Webブラウザー]]にとっては[[プラットフォームオブジェクト]]ではありません。

[8] [[プラットフォームオブジェクト]]は、[[非コールバックインターフェイス]]のみ[[実装]]できます
[SRC[>>1]]。

* 状態

[11] 次の[[状態]]を持ちます。
[FIG(list members)[
: [F[[[関連付けられた大域環境]]]] :
: [F[[[関連する設定群オブジェクト]]]] :
: [F[関連Realm]] :
: [F[関連大域オブジェクト]] :
: [F[関連エージェント]] :
]FIG]

* 処理

[6] [[Web IDL]] の実装は、[[プラットフォームオブジェクト]]を [[C++]] その他の言語で実装しても構いませんし、
[[JavaScript]] で実装しても構いません。いずれにせよ、実装は自身の[[プラットフォームオブジェクト]]を認識できる必要があります。
これは何らかの内部状態を[[オブジェクト]]に持たせることでも構いませんし、 [[C++]]
の[[クラス]]によって区別するのでも構いませんし、他の方法でも構いません。 [SRC[>>1]]

[10] それも含め、実装は自身の[[プラットフォームオブジェクト]]の内部状態
([[JavaScript]] の通常の操作で直接アクセスできない状態) を操作できる必要があります。

* 特殊なオブジェクト

[13] 次の[[オブジェクト]]は特殊な性質を持ちます。

[FIG(short list)[
- [CODE(DOMi)@en[Location][Location (DOM)]]
- [CODE(DOMi)@en[Window]]
- [CODE(DOMi)@en[WindowProxy]]
]FIG]

* 関連

[9] [[プラットフォームオブジェクト]]の定義に[[大域環境]]は影響しません。
従って他の[[大域環境]]で作成された[[オブジェクト]]であっても、
[[プラットフォームオブジェクト]]には違いありません。

* 歴史

[12] [CITE@en[Use platform object rather than IDL-defined object · whatwg/html@a38e8c3]]
([TIME[2016-03-05 11:25:52 +09:00]] 版)
<https://github.com/whatwg/html/commit/a38e8c37f4784c65e0a0de4e49b6f9af44830b42>

[14] [CITE@en[Prevent '''[''''''['''SetPrototypeOf''']'''''']''' on all globals (#209)]]
([[domenic]]著, [TIME[2016-11-04 02:19:56 +09:00]])
<https://github.com/heycam/webidl/commit/d8901f68a717240c43e33b71837b153896db64e5>

[15] [CITE@en[Add legacy platform objects. (#230)]]
([[tobie]]著, [TIME[2016-11-15 02:07:16 +09:00]])
<https://github.com/heycam/webidl/commit/379685767dce3f953e187a2a8f3cb492b9b56649>

[16] [CITE@en[Editorial: cleanup platform and legacy platform object descriptions (#…]]
([[tobie]]著, [TIME[2017-12-11 08:55:33 +09:00]])
<https://github.com/heycam/webidl/commit/2953a97d605c7ff823285fa64f36cdc2b351e967>

[17] [CITE@en[Editorial: cleanup platform and legacy platform object descriptions by tobie · Pull Request #493 · heycam/webidl]]
([TIME[2017-12-12 15:50:15 +09:00]])
<https://github.com/heycam/webidl/pull/493>

[18] [CITE@en[Editorial: clarify the definition of the class string of a platform o…]]
([[Ms2ger]]著, [TIME[2018-08-07 22:26:46 +09:00]])
<https://github.com/heycam/webidl/commit/72560be78bd0341681d6fbad2bda96fc940e04d7>

[19] [CITE@en[Include the legacy namespace identifier in both interface prototype objects and platform objects. by Ms2ger · Pull Request #577 · heycam/webidl]]
([TIME[2018-10-22 01:15:08 +09:00]])
<https://github.com/heycam/webidl/pull/577>