たとえば、関数の2つの呼び出し方法を定義します。
コードコピーは次のとおりです。
関数getInfo(){
var info = {
メッセージ:「メッセージ」
};
情報を返す;
}
1。varinfo1 = getInfo();
2。varinfo2 = new getInfo();
1と2に違いはありますか? Info1とInfo2によって取得された値は同じですか?
最初のタイプは非常にシンプルで、機能を実行し、関数の返品値を受け入れ、Info1オブジェクトに割り当てることです。
2番目の状況は一般的にまれです。まず、関数はオブジェクトでもあります。オブジェクトが確信している場合は、インスタンス化できます(インスタンスは実際にオブジェクトのコンストラクターを呼び出してオブジェクトを初期化します)。 2番目のケースはすべて、GetInfo Functionオブジェクトのコンストラクターを呼び出し、コンストラクターによって初期化されたインスタンスを受信することです(通常はこれ)。関数のより特別な点は、コンストラクターが返品値を表示する場合、返品値が返品値に置き換えることです。したがって、2番目のケースでは、New GetInfoはコンストラクター(関数のコンストラクターがその定義自体)を呼び出し、返品値情報を受信することです。
応用:
1.たとえば、HTMLはDOMオブジェクトを定義します。
コードコピーは次のとおりです。
function $(domid){
var dom = document.getElementById(domid);
domを返す;
}
window.onload = function(){
var dom1 = new $( "Domid");
var dom2 = $( "domid");
アラート(dom1 == dom2);
}
その後、アラートプロンプトメッセージがTRUEを表示します。関数名として$を使用する理由は、この関数を使用するとき、JQueryのスタイルに少し似ているからですか?実際、このスタイルの関数定義はjQueryコンストラクターに適用されます。新規を使用する場合でも、関数を直接呼び出す場合でも、返された値は同じです。
2。互換性のあるXMLHTTPREQUESTオブジェクトを定義します(この例は、権威あるJavaScriptガイドのセクション18.1から抜粋しています)
誰もが、異なるブラウザが非同期通信を異なる方法でサポートする可能性があることを知っています。早期IESはActiveXメソッドを使用しました。次のコードは、互換性のあるxmlhttprequestオブジェクトを定義します。
コードコピーは次のとおりです。
if(window.xmlhttprequest === undefined){
window.xmlhttprequest = function(){
試す {
//利用可能な場合は、ActiveXオブジェクトの最新バージョンを使用します
new ActiveXObject( "msxml2.xmlhttp.6.0")を返します。
} catch(ex1){
試す {
new ActiveXObject( "msxml2.xmlhttp.3.0");
} catch(ex2){
新しいエラーをスローします( "xmlhttprequestがサポートされていません")
}
}
}
}
このようにして、IEブラウザーかFirefoxブラウザであるかに関係なく、var xhr = new xmlhttprequest()を介して直接定義できます。