2013-09-27 9 views
2

저는 최근에 자바 스크립트의 데이터 구조를 탐색하고 싶었고 쉽게 할 수 없다는 것을 깨달았습니다. 예를 들어, 다음 코드를 보자자바 스크립트 - 부모 객체 가져 오기

var a="asdf"; 

건이며, a을 자신의 공간에 존재하지 않습니다. 사실 window 개체의 속성이됩니다. 이것은 "어떤 것이 창 객체를 소유합니까?"와 같은 몇 가지 질문을 이끌었습니다. 그리고 "창에 객체가 콘솔로 연결되어 있습니까?"

변수 나 개체의 부모 개체 (존재한다고 가정)를 볼 수 있다는 것은 정말 좋을 것 같습니다. 콘솔에서이 사실을 알려주는 방법이 있습니까?

+1

아니요. 설명하는 효과는 실제로 전역 개체에만 적용됩니다. 함수의 지역 변수는 조작하거나 "볼"수있는 객체의 속성이 아닙니다. – Pointy

답변

2

각 자바 스크립트 환경에는 전역 변수 및 기타 전역 적으로 액세스 가능한 모든 것을 "보유"하는 일종의 전역 개체가 있습니다. 브라우저 자바 스크립트 환경에서이 전역 객체는 window 객체입니다. 브라우저에서 발견 된 모든 전역 변수는 실제로 window 개체의 속성입니다.서버 측 JS와 같은 다른 자바 스크립트 환경에서는 전역 객체가 윈도우 객체가 아니지만 비슷하게 작동하는 전역 객체가 있습니다 (기본 내장 브라우저 창 속성은 없지만).

변수를 쿼리하고 그 포함 된 개체가 무엇인지 찾아내는 일반적인 방법은 없습니다. 일부 경우 (함수의 지역 변수와 같은 경우) 변수에 액세스 할 수있는 객체가 포함 된 자바 스크립트 액세스가 불가능합니다.

window 개체 자체는 기본적으로 브라우저에서 소유하거나 제어합니다. 브라우저가 새 브라우저 창이나 탭을 열 때마다 새 창 객체가 만들어집니다. 그런 다음 해당 창 개체에 문서를로드하여 표시하고 windowdocument 개체를 해당 페이지의 javascript에 액세스 할 수 있습니다.

+0

정말 흥미로운 점은 (내 대답의 작은 글꼴 부분을보십시오) 언어가 전역 개체의 모든 속성에 전역으로 액세스 할 수 있다고 결정하지만 전역 개체 자체에 액세스 할 필요가 없다는 것입니다. 그런 일이 일어나기 위해서, 전역 객체는 자신에 대한 참조를 가지고있는 속성을 가져야 만합니다 (브라우저에서는 "window"라고 부름). 함수 어휘 환경 객체에서 같은 작업을 수행하면 로컬 변수도 반복 할 수 있습니다. – bfavaretto

-1

사용 네임 스페이스.

많은 기사가 있습니다. 예 : here.

var AppSpace = AppSpace || {}; 

그런 다음 모든 변수가이 공간에서 생성됩니다 :
AppSpace.Podcast = function { 
    this.title = 'Astronomy Cast'; 
    this.description = 'A fact-based journey through the galaxy.'; 
    this.link = 'http://www.astronomycast.com'; 
}; 

AppSpace.Podcast.prototype.toString = function() { 
    return 'Title: ' + this.title; 
} 

지금 그 변수가 window 객체를 오염시키지 않습니다

는 네임 스페이스를 정의합니다. 페이지에 포함 된 JS 파일이 window 아래에서 동일한 변수 이름을 사용하는 경우 가능한 이름 충돌을 피하는 것이 좋습니다.

1

"창 객체는 무엇입니까?"

예, window 개체! 재미

window.window === window; // true 

을하지만 window 사실 자체를 "소유"것을 의미하지 않습니다 :-)이보십시오. 여기에는 window이라는 자체에 대한 참조가 있으며, 이것이 바로 window 개체가 전체적으로 사용 가능하게 만드는 이유입니다.

은 콘솔에 연결된 개체입니까?

예.

변수 나 개체의 부모 개체 (존재한다고 가정)를 볼 수 있다는 것은 정말 좋을 것 같습니다.

전역 (window) 범위에서만 가능합니다. 하지만 언제나 자신 만의 개체를 만들어 네임 스페이스로 사용할 수 있습니다.

관련 문제