別のソースからArrayコンストラクターを指定する必要があるのはなぜですか?また、配列オブジェクトでtoString()を直接呼び出すことができないのはなぜですか?

モーハハム
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);

var _Array = window.frames[window.frames.length-1].Array;

var arr = new _Array(1,2,3);

typeof arr; //'object'
arr instanceof Array; //false

このコードについて3つの質問があります:

  1. Object.prototypeは、_ArrayとArrayプロトタイプの両方のプロトタイプチェーンに表示されますが、Arrayと_Arrayは同じチェーンに含まれていないため、(arr instanceof Array)はfalseを返しますか?

  2. ここで何が起こっているのかを正確に理解したいのですが、これが私の考えです。_Arrayは "windows.iframe [...]。Array"が指すのと同じコンストラクターを指し、次に_Arrayのインスタンスを作成しますそのプロトタイプはArrayを指します。プロトタイプであり、Array.prototype.protoはObject.prototypeを指します。したがって、_ArrayとArrayはどちらも、Object.prototypeから継承された配列オブジェクトのコンストラクターです。では、_ArrayオブジェクトとArrayオブジェクトで「[objectArray]」を取得するために、Object.prototypeから直接toString()を呼び出す必要があるのはなぜですか?次のように呼び出すと、次のようになります。arr.toString()空の文字列を取得し、Object.prototype.toString.call(arr)を呼び出すと、「[objectArray]」を取得します。何故ですか?

  3. 別のソースから配列コンストラクターを指す必要がある理由を誰かが説明できますか?このコードでは、_Arrayは「windows.iframe [...]。Array」が指すのと同じコンストラクターを指します。なぜそれが役に立つのですか?

ヌーノ

AnArray、動作を伴う単なるデータ構造です。多くの配列実装があり、独自に実装することもできます。

  1. ここで何が起こっているのかを正確に理解したい...
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);

// Accessing a new type of Array
var _Array =
  window.frames[window.frames.length-1].Array;

// Instantiates new array of type "_Array" (declared in iframe)
var arr = new _Array(1,2,3); // [1,2,3]

// Shows the type of arr variable
typeof arr; //-> 'object'

// Asserting that the "arr" instance is not in an instance of type "Array" (native Javascript type), rather it is of the type declared in the iframe
arr instanceof Array; //-> false
  1. (...)なぜそれが役に立つのですか?

このコードはそれ自体ではかなり役に立たないことに注意してください(これはスニペットの例です)。その可能性のある目標は表示することです

  • Javascriptでの基本的な型関連の操作
  • iframeが新しいタイプなどのデータを保持する可能性(Array

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ