예를 들어 함수의 두 가지 호출 방법을 정의합니다.
function getInfo () {
var info = {
message: "message"
}
return info
}
1, var info1 = getInfo() ;
2.var info2 = new getInfo();
1과 2의 차이가 있나요? info1과 info2에서 얻은 값이 동일한가요?
첫 번째는 매우 간단하고 널리 사용됩니다. 함수를 실행하고 함수의 반환 값을 받아 info1 개체에 할당하는 것입니다.
두 번째 상황은 일반적으로 드뭅니다. . 우선, 함수도 객체이고 확실히 인스턴스화될 수 있습니다(인스턴스화는 실제로 객체를 초기화하기 위해 객체의 생성자를 호출하는 것입니다). 두 번째 경우는 getInfo 함수 객체의 생성자를 호출하고 생성자 초기화를 수신하는 것입니다. 일반적으로 this), 함수의 특별한 기능은 생성자에 표시된 반환 값이 있는 경우 반환 값이 this 개체를 대체하는 데 사용된다는 것입니다. 따라서 두 번째 경우에는 new getInfo가 생성자를 호출하고(함수의 생성자는 함수 정의 자체임) 반환 값 정보를 받습니다.
애플리케이션:
1. 예를 들어 HTML은 DOM 객체를 정의합니다:
, js 코드는 다음과 같습니다.
function $(domId) {
var dom = document.getElementById(domId);
return dom;
}
window.onload = function() {
var dom1 = new $("domId")
var 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 개체를 사용
새 ActiveXObject 반환 ("Msxml2.XMLHTTP.6.0");
} catch(ex1) {
try {
return new ActiveXObject("Msxml2.XMLHTTP.3.0")
} catch(ex2); 🎜>throw new Error("XMLHttpRequest is not support")
}
}
}
}
이런 식으로 var xhr = new를 직접 전달할 수 있습니다. XMLHttpRequest()는 IE인지 Firefox인지에 관계없이 정의됩니다.