글로벌 범위에 따라
이것;
이것을 글로벌 범위로 사용하면 글로벌 객체를 가리 킵니다.
다음은 글로벌 객체에 대한 자세한 소개입니다.
글로벌 객체는 실행 컨텍스트를 입력하기 전에 생성 된 객체입니다.
이 개체의 사본은 단 하나 뿐이며 프로그램의 어느 곳에서나 속성에 액세스 할 수 있습니다. 글로벌 객체의 수명주기는 현재 프로그램이 종료되는 순간에 끝납니다.
글로벌 객체의 초기 생성 단계에서 수학, 문자열, 날짜, parseint는 자체 속성 등으로 초기화되며 다른 추가 객체는 속성 (글로벌 객체 자체를 가리킬 수 있음)으로 만들 수 있습니다. 예를 들어, DOM에서 글로벌 객체의 창 속성은 전역 객체 자체를 참조 할 수 있습니다.
콘솔의 바람과 동일합니다.
함수를 호출 할 때
foo ();
여기에서 이것은 또한 글로벌 객체를 가리 킵니다.
메소드를 호출 할 때
test.foo ();
이 예에서는 테스트 객체를 가리 킵니다.
생성자를 호출 할 때
새로운 foo ();
호출 할 때 새로운 키워드와 함께 함수가 사용되며 생성자라고합니다. 현재 함수 내에서 이것은 새로 생성 된 객체를 가리 킵니다.
명시 적으로 설정할 때
함수 foo (a, b, c) {} // var bar = {}; foo.apply (bar, [1, 2, 3]); // 배열은 아래에 밑으로 확장됩니다 (bar, 1, 2, 3); // a = 1, b = 2, c = 3을 초래합니다.기능의 적용 및 호출 메소드를 사용하면이 값이 메소드의 첫 번째 매개 변수로 명시 적으로 설정됩니다.
따라서 함수를 호출 할 때 규칙과 달리 위의 예에서는 막대를 가리 킵니다.
다음은 전화 및 적용 방법입니다.
통화 방법 :
구문 : call ([thisobj [, arg1 [, arg2 [, .Argn]]]])))
정의 : 현재 객체를 다른 객체로 바꾸려면 객체의 메소드를 호출하십시오.
방법 적용 :
구문 : apply ([thisobj [, argarray]])
정의 : 특정 객체의 하나의 메소드를 적용하고 현재 객체를 다른 객체로 바꾸십시오.
여기서 우리는 객체가 문자 그대로 선언 될 때 객체 자체를 가리키는 데 사용될 수 없다는 점에 유의해야합니다. 다음과 같이 :
var obj = {me : this}여기서 이것은 OBJ를 가리키지 않을 것이며, 이것의 적용은 위의 5 가지 상황으로 제한됩니다.
요약
위의 상황은 대부분 의미가 있지만, 두 번째 경우 (즉, 함수를 호출 할 때)는 실제로 유용하지 않으므로 JavaScript 디자인의 또 다른 오류로 간주됩니다.
foo.method = function () {function test () {// 이것은 글로벌 개체} test ();}로 설정됩니다.위에서 언급했듯이 여기에서 이것은 FOO 함수가 아니라 글로벌 객체를 가리킬 것입니다.
테스트에서 FOO를 가리키는 방법을 얻으려면 FOO를 가리키는 방법 안에 로컬 변수를 만들어야합니다.
foo.method = function () {var that = this; function test () {// 여기에서 대신 사용} test ();}그것은 단지 정상적인 변수 이름이지만 종종이 외부를 가리키는 데 사용됩니다.
함수 별명과 관련된 또 다른 흥미로운 것이 있습니다. 즉, 메소드가 변수에 할당 될 때.
var test = someObject.MethodTest; test ();
위의 예에서, 테스트는 정상적인 함수로 취급되므로 두 번째 경우 (즉, 함수가 호출 될 때)에 따르면,이 내부는 someobject가 아닌 전역 변수를 가리 킵니다.
이 늦은 바인딩은 처음에는 나쁜 결정으로 보이지만 실제로는 프로토 타입 상속의 기초입니다.
funture foo () {} foo.prototype.method = function () {}; function bar () {} bar.prototype = foo.prototype; new bar (). method ();이 시점에서 메소드가 호출되면 막대의 인스턴스 객체를 가리 킵니다.