私は DOM スクリプトに関する本を読んでいますが、Ajax について話しているときに次の関数が本に出てきます。
function getHTTPObject() {
if(typeof XMLHTTPRequest == "undefined")
XMLHTTPRequest = function() {
try { return new ActiveXObject("Msxml2.XMLHTTP.6.0");}
catch(e) {}
//several more fall through try/catch blocks attempting
//to create different XMLHTTP objects.
//If none succeed...
return false;
}
return new XMLHTTPRequest();
}
XMLHTTPRequest に割り当てられた内部匿名関数内で ActiveXObject を作成しようとするときに、try/catch ブロック内で new キーワードが使用されている場合、getHTTPObject() の最後で XMLHTTPRequest の結果を返すときに new キーワードが再び使用されるのはなぜですか?
新しい、新しいオブジェクトを返しているようです。
編集
XMLHTTPRequest コンストラクターが存在するかどうかを確認し、存在しない場合は XMLHTTP ActiveXObjects を作成しようとするコンストラクターを定義するというコードの目的を広く理解しています。ここまで一緒です。
XMLHTTPRequest が未定義であるとします。
XMLHTTPRequest には内部関数コンストラクターが割り当てられます。
次に、getHTTPRequest の下部で XMLHTTPRequest が呼び出されます。
XMLHTTPRequest 内で、新しい ActiveXObject が作成され、呼び出し元 (この場合は getHTTPObject) に返されます。今度は getHTTPObject がこのオブジェクトを呼び出し元に返します。しかし、繰り返しますが、なぜ行は次のようになります:
return new XMLHTTPRequest()
XMLHTTPRequest() の定義/スコープ内のその try ブロックのコード内で new (つまり、オブジェクトのインスタンス化) が既に発生している場合、そこに new が必要ですか? なぜ単純ではないのですか:
return XMLHTTPRequest()
答えてくれてありがとう。おそらく、私が JS コンストラクターの構文を十分に理解していない可能性が非常に高く、それが私をここでつまずかせている原因です。