2012-04-09 1 views
3

JavaScript와 객체/스크립트의 모든 종류의 런타임/동적 조작을 수행하는 복잡한 비트를보고 있습니다. 그 과정에서 나는 자바 스크립트와 그 특이성에 관한 모든 종류의 세부점을 배우고있다.javascript에서 window와 this.window의 차이점은 무엇입니까?

이 하나는 저를 곤란하게합니다. 항상 상황이 있습니까

다른 말로하면,이 창을 곧바로 창 밖으로 쓰지 않으시겠습니까?

+5

가능한 복제본 : http://stackoverflow.com/questions/4180013/javascript-this-window-not-equal-to-window – jdi

+0

그래, 복제본이지만 그럼에도 불구하고 좋은 질문입니다. – Nick

+1

@jdi 나는 다른 질문이 나의 대답이라고 확신하지 못한다. 그것은 단지 * 8 * 아래에 this.window! == 창, 그리고 글로벌 네임 스페이스에서만? – blueberryfields

답변

3

전역 객체 가리 키지 않는

물론이 때마다 this.window 재산없이 또는 .window 속성 개체를 참조 "window !== this.window; //true는 상황 적 있습니까" (window이 전역 인 브라우저 환경으로 가정).

는 "... 때 혹시 this.window 대신 똑바로 window 작성합니다?

this.window 속성은 세계에 대한 참조되지 않는 예상된다 개체를 참조.

1

글쎄, 중복되었지만 this은 글로벌 범위 (err)에있을 때 전역 범위를 참조하며 전체 범위는 window입니다. 당신은 생성자로 사용되고 함수에 있다면 예 (new Pie())을 위해, this는 더 이상 글로벌 범위를 말합니다 아니라 객체 생성되는,

을 (그래서 this == windowwindow.window == window는 해당 없음). this은 코드 실행 위치에 따라 달라집니다.

+0

this.window는 생성자의 글로벌 윈도우로 계속 해석되지 않습니다 (명시 적으로 덮어 쓰지 않는 한 생성자의 어딘가에서 추측하겠습니다). – blueberryfields

+0

만약 당신이 그것을'new SomeConstructor()'로 호출한다면 이것은 객체의 인스턴스화를 참조 할 것이라고 생각합니다. 단지 예제 일뿐입니다. – gengkev

2

this은 C++ 및 java와 같이 자바 스크립트에서 이름이 암시 적으로 검색되지 않습니다.

은 또는 someobject.foo 대신 foo을 참조하고 순서대로 var- 선언 된 변수를 시도한 다음 전역 이름 공간을 시도합니다.

this.varthiswindow 개체입니다 기본 전역 네임 스페이스를 의미 만 this의 구성원 (및 프로토 타입 및 프로토 타입의 프로토 타입 등) 스크립트에서 최고 수준의

를 찾습니다 그 곳에서 foo.meth()으로 메소드를 호출 할 때까지 머무르게됩니다. window에는 기껏해야 충분히 window이라는 멤버가 포함되어 있습니다. 그래서 당신은 일반적으로 갈 수

window.window.window.window.location = "some_url"

을 당신이 좋아하는 경우. 사실, "그냥 거기에있다"라고 가정하는 이름은 엄청나게 많습니다.

Object === window.Object

당신은 당신이

var window;

이 코드 블록 내에서 글로벌 창을 숨 깁니다 window라는 변수를 선언 말할 수 좋아한다면. 그러나 그렇게하지 마십시오.

나는 네가 실제로 전역 네임 스페이스가 무엇인지를 바꿀 수 있다고 믿는다. 그러나 어떻게 기억하지는 않는다.

+0

전역 네임 스페이스를 무시할 수 있습니까? O.o – gengkev

+0

실제로 나는 그것에 대해 잘 모르겠습니다. 답변이 수정되었습니다. –

관련 문제