For example, define two calling methods of a function:
function getInfo () {
var info = {
message: "message"
};
return info;
}
1, var info1 = getInfo() ;
2. var info2 = new getInfo();
Is there any difference between 1 and 2? Are the values obtained by info1 and info2 the same?
The first one is very simple and widely used. It is to execute a function, accept the return value of the function and assign it to the info1 object;
The second situation is generally rare. . First of all, a function is also an object, and it can definitely be instantiated (instantiation is actually calling the object's constructor to initialize the object). The second case is to call the getInfo function object's constructor and receive the constructor initialization. instance (usually this), and a special feature of the function is that if the constructor has a displayed return value, the return value will be used to replace the this object. So in the second case, new getInfo calls the constructor (the constructor of the function is its definition itself) and receives the return value info.
Application:
1. For example, HTML defines the DOM object:
, the js code is as follows:
function $(domId) {
var dom = document.getElementById(domId);
return dom;
}
window.onload = function() {
var dom1 = new $("domId");
var dom2 = $("domId") ;
alert(dom1 == dom2);
}
The alert message will display true. The reason why $ is used as the function name is because when using this function, does it look a bit like jQuery's style? In fact, this style of function definition is used in jQuery's constructor. Whether you use new or call the function directly, the returned value is the same.
2. Define a compatible XMLHttpRequest object (this example is taken from Section 18.1 of the Javascript Authoritative Guide)
Everyone knows that different browsers may support asynchronous communication in different ways. Early IE used In the ActiveX way, the following code defines a compatible XMLHttpRequest object:
if (window.XMLHttpRequest === undefined) {
window.XMLHttpRequest = function() {
try {
//If available, use the latest version of the ActiveX object
return new ActiveXObject("Msxml2.XMLHTTP.6.0");
} catch (ex1) {
try {
return new ActiveXObject("Msxml2.XMLHTTP.3.0");
} catch (ex2) {
throw new Error("XMLHttpRequest is not supported")
}
}
}
}
In this way, you can directly pass var xhr = new XMLHttpRequest() is defined, regardless of whether it is IE or Firefox.