JavaScript- 글로벌 컨텍스트에 있는지 확인하십시오
-
23-08-2019 - |
문제
함수가 객체에 첨부되어 호출되는 경우
function f() { return this.x; }
var o = {x: 20};
o.func = f;
o.func(); //evaluates to 20
this
함수가 방법으로 불리는 객체를 나타냅니다. 그것은하는 것과 같습니다 f.call(o)
.
함수가 객체의 일부가 아닌 경우 this
글로벌 객체를 나타냅니다. 객관적이 아닌 컨텍스트에서 함수가 호출되는지 어떻게 확인합니까? 글로벌 객체에 액세스 할 수있는 표준 키워드가 있습니까? 이런 일을하는 유일한 방법은?
globalobj = this;
function f() { if (this == globalobj) doSomething(); }
참고 : 여기에 특별한 사용 사례가 없습니다. 실제로이 정확한 메커니즘에 대해 묻고 있습니다.
해결책
글로벌 객체는 실제로 창이므로
if (this === window)
다른 팁
아래는 function을 사용하기 때문에 작동해야합니다.
this === ((function () { return this; }).call(null))
더 간단한 변형,
this === (function () { return this; })()
또한 작동하지만 첫 번째는 의도를 더 명확하게 만든다고 생각합니다.
Roborg의 대답은 개념적으로 정확합니다 window
브라우저 메인 스레드의 맥락에서만 사용할 수 있습니다 (따라서 이것은 반드시 작업자 스레드 등을 제외하고 비 브라우저 호스팅 JS를 제외하고는 점점 덜 드물고 덜 드릴 수 있습니다).
가장 안전한 베팅은 기본적으로 위의 내용이지만 사용해야합니다. var
그리고 ===
통역사가 이러한 액세스를보다 완전히 최적화 할 수 있습니다.
제휴하지 않습니다 StackOverflow