2

最近の標準は、ホスト オブジェクトとそのプロトタイプの拡張について何と言っていますか? たとえばNodeList、メソッド_forEachまたは適切Documentに定義されたメソッドで拡張していますか?_my_query

Object.prototype標準でホスト オブジェクトに追加したものは表示されますか?

関連する標準に関して、実際の実装はどのように動作しますか?

注: ホスト オブジェクトまたはそのプロトタイプを拡張することが良い考えであるかどうかを尋ねているわけではありません (ただしObject.defineProperty、問題を列挙することに関しては少し簡単になります)。

4

3 に答える 3

2

ECMAScript 5 は、ホスト オブジェクトのプロトタイプ チェーンについて何も述べていません。

これはWebIDLで定義されています。

具体的には、次のように書かれているECMAScript bindingsセクションを見てください。

特に指定しない限り、このセクションで定義されているオブジェクトの [[Prototype]] 内部プロパティは、Object プロトタイプ オブジェクトです。

そしてこれは、次のセクションから:

各 ECMAScript グローバル環境 ([ECMA-262]、セクション 10.2.3) には、制御が環境に関連付けられた ECMAScript 実行コンテキストに入る前に作成された、初期オブジェクトのそれぞれの独自の一意のセットが必要ですが、その環境のグローバル オブジェクトの後に作成されます。創造された。特定のグローバル環境内のすべての初期オブジェクトの [[Prototype]] は、同じグローバル環境から取得する必要があります。

もあります:

iframe.appendChild instanceof Function;    // Evaluates to true

最後に、Interface Prototype Objectセクションは次のように述べています (強調は私のものです):

特定のインターフェイス A の名前付きプロパティ オブジェクトには、次のような値を持つ内部 [[Prototype]] プロパティが必要です。

A が別のインターフェイスから継承するように宣言されていない場合、インターフェイスが [ArrayClass で宣言されている場合、A の内部 [[Prototype]] プロパティの値は Array プロトタイプ オブジェクト ([ECMA-262]、セクション 15.4.4) です。 ]、またはそれ以外の場合は Object プロトタイプ オブジェクト ([ECMA-262]、セクション 15.2.4)。

それ以外の場合、A は別のインターフェイスから継承します。A の内部 [[Prototype]] プロパティの値は、継承されたインターフェイスのインターフェイス プロトタイプ オブジェクトです。

したがって、DOM レベル 3 とDocument インターフェースを見ると、それが Node インターフェースから継承されていることがわかります。ノード インターフェイスは、他のものから明示的に継承していません。つまり、 から継承していObject.prototypeます。

これは理論です:)

実際には、すべてのブラウザーがこの動作に従うわけではありませんが、最近のブラウザーのほとんどは確かにそうしています。

于 2013-06-08T22:31:10.657 に答える
1

ECMASCRIPT5 仕様には次のように記載されています。

Web サーバーは、要求、クライアント、およびファイルを表すオブジェクトを含む、サーバー側の計算用に異なるホスト環境を提供します。データをロックして共有するメカニズム。ブラウザー側とサーバー側のスクリプトを一緒に使用することで、Web ベースのアプリケーション用にカスタマイズされたユーザー インターフェイスを提供しながら、クライアントとサーバーの間で計算を分散することができます。

ECMAScript をサポートする各 Web ブラウザーとサーバーは、独自のホスト環境を提供し、ECMAScript 実行環境を完成させます。

他に何も言われていないと思います。これは、実装が仕様に準拠し、必要に応じてブラウザー オブジェクトを実装できることを意味すると解釈できます。これは過去のケースです。言語の力を外部環境に適用することは論理的に思えますが、私はすべての「最新の」ブラウザーが現在それを行っていると信じています。

于 2013-06-05T19:18:06.740 に答える
0

dom/html 要素には、次のようなプロトタイプ チェーンが HTMLElement > Element > Node > Object
あります。

于 2013-06-05T18:09:11.897 に答える