문제

함수가 객체에 첨부되어 호출되는 경우

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 그리고 === 통역사가 이러한 액세스를보다 완전히 최적화 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top