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つの質問があります:
Object.prototypeは、_ArrayとArrayプロトタイプの両方のプロトタイプチェーンに表示されますが、Arrayと_Arrayは同じチェーンに含まれていないため、(arr instanceof Array)はfalseを返しますか?
ここで何が起こっているのかを正確に理解したいのですが、これが私の考えです。_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]」を取得します。何故ですか?
別のソースから配列コンストラクターを指す必要がある理由を誰かが説明できますか?このコードでは、_Arrayは「windows.iframe [...]。Array」が指すのと同じコンストラクターを指します。なぜそれが役に立つのですか?
AnArray
は、動作を伴う単なるデータ構造です。多くの配列実装があり、独自に実装することもできます。
- ここで何が起こっているのかを正確に理解したい...
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
- (...)なぜそれが役に立つのですか?
このコードはそれ自体ではかなり役に立たないことに注意してください(これはスニペットの例です)。その可能性のある目標は表示することです
Array
)この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加