예를 들어, 함수에 대한 두 가지 호출 방법을 정의합니다.
코드 사본은 다음과 같습니다.
함수 getInfo () {
var info = {
메시지 : "메시지"
};
반품 정보;
}
1. var info1 = getInfo ();
2. var info2 = 새로운 getInfo ();
1과 2의 차이가 있습니까? Info1과 Info2에 의해 얻어진 값이 동일합니까?
첫 번째 유형은 매우 간단하며 함수를 실행하고 함수의 리턴 값을 수락하여 info1 객체에 할당하는 것입니다.
두 번째 상황은 일반적으로 드 rare니다. 우선, 함수도 객체입니다. 객체가 확실하면 인스턴스화 할 수 있습니다 (인스턴스는 실제로 객체의 생성자를 호출하여 개체를 초기화합니다). 두 번째 사례는 getInfo 함수 객체의 생성자를 호출하고 생성자에 의해 초기화 된 인스턴스를받는 것입니다 (일반적으로 이것은). 이 기능에 대한보다 특별한 점은 생성자가 리턴 값을 표시하면 리턴 값이 리턴 값으로 대체된다는 것입니다. 두 번째 경우, 새로운 getInfo는 생성자 (함수의 생성자가 정의 자체)를 호출하고 반환 값 정보를받는 것입니다.
애플리케이션:
예를 들어, HTML은 dom 객체를 정의합니다. <div id = "domid"> </div>, JS 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
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 === 정의되지 않은) {
window.xmlhttprequest = function () {
노력하다 {
// 사용 가능한 경우 ActiveX 객체의 최신 버전을 사용하십시오
새로운 ActiveXobject ( "MSXML2.XMLHTTP.6.0");
} catch (ex1) {
노력하다 {
New ActiveXobject를 반환합니다 ( "MSXML2.XMLHTTP.3.0");
} catch (ex2) {
새 오류를 던지십시오 ( "xmlhttprequest는 지원되지 않습니다")
}
}
}
}
이러한 방식으로 IE 브라우저 또는 Firefox 브라우저인지 여부에 관계없이 var xhr = new xmlhttprequest ()를 통해 직접 정의 할 수 있습니다.