객체를 만드는 Foo
이라는 js에 "클래스"(함수)가 있습니다. 매우 자주 사용되기 때문에 new Foo(something);
대신 Foo(something);
이라는 새 인스턴스를 만들 때 new
키 보드를 사용하지 않아야합니다. 새 연산자를 사용하지 않은 경우 새 객체 반환
function Foo(arg) {
if (this instanceof Window)
return new Foo(arg);
//Object construction here.
this.bar = "Hello " + arg;
}
지금은 단지 함수로 호출하여 푸의 인스턴스를 만들 수 있습니다.
console.log(Foo("World").bar); //Output "Hello World" in console.
FF에서는 작동하지만 크롬에서는 작동하지 않지만 IE는 아직 테스트하지 않았습니다.
크롬의 문제는 window
어떤 이유로 그것을 제공하기 때문에 크롬에서 작동하지 않습니다 크롬
Uncaught ReferenceError: Window is not defined
및 this instanceof DOMWindow
을 정말 유형 DOMWindow
의 점이다 :
ReferenceError: DOMWindow is not defined
나는 또한 시도 !(this instanceof Foo)
및 typeof this
을 사용하면 항상 "object"
이 표시됩니다.
Foo
을 모든 브라우저에서 호출 할 때 new
키워드가 생략 된 경우 어떻게 안정적으로 감지 할 수 있습니까?
업데이트 : !(this instanceof Foo)
작동하지 않습니다. 방금 return this
을 실제 Foo
기능에 포함 시켰습니다.
'! (this instanceof Foo)'를 사용하면 나에게 적합합니다 (Mac에서는 Chrome, Safari, Firefox). 그 코드는 :'Foo() {console.log (this instanceof Foo)}'는 위의 브라우저에서'Foo()'와'new Foo()'를'true'로 기록 할 것입니다. – ZER0
@ ZER0 예, 방금 작동하지 못하게하는 함수에서 '돌아 오는이'함수를 가지고 있다는 것을 알았습니다. –