Par exemple, définissez deux méthodes d'appel d'une fonction :
function getInfo () {
var info = {
message : "message"
}
return info
}
1, var info1 ; = getInfo() ;
2. var info2 = new getInfo();
Y a-t-il une différence entre 1 et 2 ? Les valeurs obtenues par info1 et info2 sont-elles les mêmes ?
La première est très simple et largement utilisée. Il s'agit d'exécuter une fonction, d'accepter la valeur de retour de la fonction et de l'attribuer à l'objet info1
La deuxième situation est généralement rare ; . Tout d'abord, une fonction est également un objet, et l'objet peut certainement être instancié (l'instanciation consiste en fait à appeler le constructeur de l'objet pour initialiser l'objet). Le deuxième cas consiste à appeler le constructeur de l'objet fonction getInfo et à recevoir l'instance d'initialisation du constructeur. (généralement ceci), et une particularité de la fonction est que si le constructeur a une valeur de retour affichée, la valeur de retour sera utilisée pour remplacer l'objet this. Ainsi, dans le deuxième cas, new getInfo consiste à appeler le constructeur (le constructeur de la fonction est sa définition elle-même) et à recevoir les informations sur la valeur de retour.
Application :
1. Par exemple, HTML définit l'objet DOM :
, le code js est le suivant :
function $(domId) {
var dom = document.getElementById(domId);
return dom;
}
window.onload = function() {
var dom1 = new $("domId"); dom2 = $("domId") ;
alert(dom1 == dom2);
}
Le message d'alerte s'affichera vrai. La raison pour laquelle $ est utilisé comme nom de fonction est que lorsque vous utilisez cette fonction, ressemble-t-elle un peu à jQuery ? En fait, le constructeur de jQuery utilise ce style de définition de fonction. Que vous utilisiez new ou appeliez la fonction directement, la valeur renvoyée est la même.
2. Définissez un objet XMLHttpRequest compatible (cet exemple est tiré de la section 18.1 du Javascript Authoritative Guide)
Tout le monde sait que différents navigateurs peuvent prendre en charge la communication asynchrone de différentes manières. , le code suivant définit un objet XMLHttpRequest compatible :
if (window.XMLHttpRequest === non défini) {
window.XMLHttpRequest = function() {
try {
//Si disponible, utilisez la dernière version de l'objet ActiveX
retourne un nouvel ActiveXObject ("Msxml2.XMLHTTP.6.0");
} catch (ex1) {
try {
return new ActiveXObject("Msxml2.XMLHTTP.3.0"
} catch (ex2) {
lancer une nouvelle erreur ("XMLHttpRequest n'est pas pris en charge")
}
}
}
}
De cette façon, vous pouvez passer directement var xhr = new XMLHttpRequest() est défini, qu'il s'agisse d'IE ou de Firefox.