차이는 두 번째 예는 new
연산자 기능이 자동으로 실행되도록한다하는 Constructor로 함수식을 사용하고, 그 함수 내부 this
값은 새로 생성 된 객체를 참조 것을 주로 .
해당 함수에서 아무 것도 반환하지 않거나 비 프리미티브 값을 반환하지 않으면 this
값이 반환되어 singleton
변수에 할당됩니다.
권한 방법은 또한 당신의 두 번째 예제에서 사용할 수있는 공통의 패턴이 개인 멤버 액세스되는 closure을 만들어 immediately invoked function expression을 사용하는 것입니다, 당신은 당신 공개 API, 예를 들어있는 개체를 반환 할 수 있습니다 :
var singleton = (function() {
var privateVar = 1;
function privateMethod() {/*...*/}
return { // public API
publicMethod: function() {
// private members are available here
}
};
})();
출처
2010-02-12 04:26:53
CMS
내가 혼란 스러워요을 becau 질문의 본문이 제목에 나오는 내용과 일치하지 않습니다. 싱글 톤에서 새로운 것을 호출하면 어떤 일이 발생하는지 정말 알고 싶으니까 조금 불행합니다. 주로 다음과 같은 일을하면 어떻게 될까요? var singleton = new (function() {return function() {};})(); 새 함수가 반환 된 함수에 적용 되었습니까? – Bob
우리는 '싱글 톤'으로 같은 것을 의미하지 않는다고 생각합니다. 질문에 대해서는 CMS의 아래 답변을보십시오. 새 연산자로 인해 함수가 자동으로 실행되고이 함수에서이 값은 새로 생성 된 객체를 나타냅니다. 아무 것도 반환하지 않으면 (또는 원시 함수가 아닌 값을 반환하지 않는다면),이 값은 리턴되어 싱글 톤 변수에 할당됩니다. " –
싱글 톤은 객체의 단일 인스턴스이며 새 연산자가 필요하지 않습니다. 적어도 일부는 JavaScript를 참조 할 때 해당 용어를 사용합니다. 멋진 다른 정의를 보유하고 있다면. 코드 스 니펫에 관해서는 게시했습니다. 시도했지만 실패했습니다. 함수를 괄호로 묶고 appending()을 추가하면 함수를 실행하고 즉시 객체를 반환하므로 new는 객체에서 작동하지 않습니다. – Bob