Definieren Sie beispielsweise zwei Aufrufmethoden einer Funktion:
function getInfo () {
var info = {
message: "message"
};
return info;
1, var info1 = getInfo() ;
2. var info2 = new getInfo();
Gibt es einen Unterschied zwischen 1 und 2? Sind die von info1 und info2 erhaltenen Werte gleich?
Die erste Möglichkeit besteht darin, eine Funktion auszuführen, den Rückgabewert der Funktion zu akzeptieren und ihn dem info1-Objekt zuzuweisen.
Die zweite Situation ist im Allgemeinen selten . . Erstens ist eine Funktion auch ein Objekt, und das Objekt kann definitiv instanziiert werden (bei der Instanziierung wird tatsächlich der Konstruktor des Objekts aufgerufen, um das Objekt zu initialisieren). (normalerweise dies), und eine Besonderheit der Funktion besteht darin, dass, wenn der Konstruktor einen angezeigten Rückgabewert hat, der Rückgabewert verwendet wird, um dieses Objekt zu ersetzen. Im zweiten Fall besteht new getInfo also darin, den Konstruktor aufzurufen (der Konstruktor der Funktion ist ihre Definition selbst) und die Rückgabewertinformationen zu empfangen.
Anwendung:
1. HTML definiert beispielsweise das DOM-Objekt:
, der js-Code lautet wie folgt:
function $(domId) {
var dom = document.getElementById(domId);
return dom;}
window.onload = function() {
var dom1 = new $("domId"); dom2 = $("domId") ;
alert(dom1 == dom2);
}
Die Warnmeldung wird „true“ angezeigt. Der Grund, warum $ als Funktionsname verwendet wird, liegt darin, dass diese Funktion bei Verwendung ein wenig wie jQuery aussieht? Tatsächlich verwendet der Konstruktor von jQuery diesen Stil der Funktionsdefinition. Unabhängig davon, ob Sie new verwenden oder die Funktion direkt aufrufen, ist der zurückgegebene Wert derselbe.
2. Definieren Sie ein kompatibles XMLHttpRequest-Objekt (dieses Beispiel stammt aus Abschnitt 18.1 des Javascript Authoritative Guide)
Jeder weiß, dass verschiedene Browser die asynchrone Kommunikation auf unterschiedliche Weise unterstützen können , definiert der folgende Code ein kompatibles XMLHttpRequest-Objekt:
window.XMLHttpRequest = function() {
try {
//Wenn verfügbar, verwenden Sie die neueste Version des ActiveX-Objekts
neues ActiveXObject zurückgeben ("Msxml2.XMLHTTP.6.0");
} Catch (ex1) {
try {
return new ActiveXObject("Msxml2.XMLHTTP.3.0");
} Catch (ex2) {
throw new Error("XMLHttpRequest wird nicht unterstützt")
}
}
}
}
Auf diese Weise können Sie var xhr = new direkt übergeben XMLHttpRequest() ist definiert, unabhängig davon, ob es sich um IE oder Firefox handelt.