JavaScript와 객체/스크립트의 모든 종류의 런타임/동적 조작을 수행하는 복잡한 비트를보고 있습니다. 그 과정에서 나는 자바 스크립트와 그 특이성에 관한 모든 종류의 세부점을 배우고있다.javascript에서 window와 this.window의 차이점은 무엇입니까?
이 하나는 저를 곤란하게합니다. 항상 상황이 있습니까
다른 말로하면,이 창을 곧바로 창 밖으로 쓰지 않으시겠습니까?
JavaScript와 객체/스크립트의 모든 종류의 런타임/동적 조작을 수행하는 복잡한 비트를보고 있습니다. 그 과정에서 나는 자바 스크립트와 그 특이성에 관한 모든 종류의 세부점을 배우고있다.javascript에서 window와 this.window의 차이점은 무엇입니까?
이 하나는 저를 곤란하게합니다. 항상 상황이 있습니까
다른 말로하면,이 창을 곧바로 창 밖으로 쓰지 않으시겠습니까?
전역 객체 가리 키지 않는
물론이 때마다 this
가 .window
재산없이 또는 .window
속성 개체를 참조 "window !== this.window; //true
는 상황 적 있습니까" (window
이 전역 인 브라우저 환경으로 가정).
는 "... 때 혹시
this.window
대신 똑바로window
작성합니다?
this
가 .window
속성은 세계에 대한 참조되지 않는 예상된다 개체를 참조.
글쎄, 중복되었지만 this
은 글로벌 범위 (err)에있을 때 전역 범위를 참조하며 전체 범위는 window
입니다. 당신은 생성자로 사용되고 함수에 있다면 예 (new Pie()
)을 위해, this
는 더 이상 글로벌 범위를 말합니다 아니라 객체 생성되는,
을 (그래서 this == window
및 window.window == window
는 해당 없음). this
은 코드 실행 위치에 따라 달라집니다.
this.window는 생성자의 글로벌 윈도우로 계속 해석되지 않습니다 (명시 적으로 덮어 쓰지 않는 한 생성자의 어딘가에서 추측하겠습니다). – blueberryfields
만약 당신이 그것을'new SomeConstructor()'로 호출한다면 이것은 객체의 인스턴스화를 참조 할 것이라고 생각합니다. 단지 예제 일뿐입니다. – gengkev
this
은 C++ 및 java와 같이 자바 스크립트에서 이름이 암시 적으로 검색되지 않습니다.
은 또는 someobject.foo
대신 foo
을 참조하고 순서대로 var
- 선언 된 변수를 시도한 다음 전역 이름 공간을 시도합니다.
this.var
는 this
가 window
개체입니다 기본 전역 네임 스페이스를 의미 만 this
의 구성원 (및 프로토 타입 및 프로토 타입의 프로토 타입 등) 스크립트에서 최고 수준의
를 찾습니다 그 곳에서 foo.meth()
으로 메소드를 호출 할 때까지 머무르게됩니다. window
에는 기껏해야 충분히 window
이라는 멤버가 포함되어 있습니다. 그래서 당신은 일반적으로 갈 수
window.window.window.window.location = "some_url"
을 당신이 좋아하는 경우. 사실, "그냥 거기에있다"라고 가정하는 이름은 엄청나게 많습니다.
Object === window.Object
당신은 당신이
var window;
이 코드 블록 내에서 글로벌 창을 숨 깁니다 window
라는 변수를 선언 말할 수 좋아한다면. 그러나 그렇게하지 마십시오.
나는 네가 실제로 전역 네임 스페이스가 무엇인지를 바꿀 수 있다고 믿는다. 그러나 어떻게 기억하지는 않는다.
전역 네임 스페이스를 무시할 수 있습니까? O.o – gengkev
실제로 나는 그것에 대해 잘 모르겠습니다. 답변이 수정되었습니다. –
가능한 복제본 : http://stackoverflow.com/questions/4180013/javascript-this-window-not-equal-to-window – jdi
그래, 복제본이지만 그럼에도 불구하고 좋은 질문입니다. – Nick
@jdi 나는 다른 질문이 나의 대답이라고 확신하지 못한다. 그것은 단지 * 8 * 아래에 this.window! == 창, 그리고 글로벌 네임 스페이스에서만? – blueberryfields