たとえば、関数の 2 つの呼び出しメソッドを定義します。
関数 getInfo () {
var info = {
メッセージ: "メッセージ"
};
情報を返す;
1, var info1 = getInfo() ;
2. var info2 = new getInfo();
1 と 2 に違いはありますか? info1とinfo2で得られる値は同じですか?
最初の状況は非常に単純で広く使用されており、関数を実行し、その戻り値を info1 オブジェクトに割り当てます。
2 番目の状況は一般にまれです。 。まず、関数もオブジェクトであり、確実にインスタンス化できます (インスタンス化とは、実際にはオブジェクトのコンストラクターを呼び出してオブジェクトを初期化することです)。2 番目のケースは、getInfo 関数オブジェクトのコンストラクターを呼び出して、コンストラクターの初期化を受け取ることです (通常は this)、この関数の特別な機能は、コンストラクターに表示された戻り値がある場合、その戻り値を使用して this オブジェクトを置き換えることです。したがって、2 番目のケースでは、 new getInfo はコンストラクターを呼び出し (関数のコンストラクターは関数の定義そのものです)、戻り値の情報を受け取ります。
アプリケーション:
1. たとえば、HTML は DOM オブジェクト:
を定義します。JS コードは次のとおりです:
function $(domId) {
var dom = document.getElementById(domId);
戻り dom;
window.onload = function() {
var dom1 = new $("domId"); dom2 = $("domId") ;
alert(dom1 == dom2);
アラート メッセージは true と表示されます。関数名に $ を使っているのは、この関数を使うとちょっと jQuery 風になるからでしょうか?実際、このスタイルの関数定義は jQuery のコンストラクターで使用されており、new を使用しても、関数を直接呼び出しても、戻り値は同じです。
2. 互換性のある XMLHttpRequest オブジェクトを定義します (この例は Javascript Authoritative Guide のセクション 18.1 から引用しています)
ブラウザーが異なれば、ActiveX 方式で使用される初期の IE が異なる方法で非同期通信をサポートする可能性があることは誰もが知っています。 、次のコードは互換性のある XMLHttpRequest オブジェクトを定義します:
コードをコピー
コードは次のとおりです: if (window.XMLHttpRequest === 未定義) { window.XMLHttpRequest = function() {
try {
//利用可能な場合は、最新バージョンの ActiveX オブジェクトを使用します
return new ActiveXObject ("Msxml2.XMLHTTP.6.0");
} catch (ex1) {
try {
return new ActiveXObject("Msxml2.XMLHTTP.3.0") {
throw new Error("XMLHttpRequest is not support")
}
}
}
}
このようにして、var xhr = new を直接渡すことができますXMLHttpRequest()はIEでもFirefoxでも定義されています。