웹 프론트엔드 JS 튜토리얼 JavaScript 고급 시리즈 - 작동 방식

JavaScript 고급 시리즈 - 작동 방식

Feb 08, 2017 am 09:48 AM

  • 전역 범위

  • 함수 호출

  • 메서드 호출

  • 생성자 호출

  • 명시적으로 설정

  • 일반적인 오해

  • 메소드 할당 표현식

JavaScript는 이를 처리하는 데 있어서 다른 언어와 완전히 다른 메커니즘을 가지고 있습니다. 다섯 가지 다른 경우에서 이는 다른 점을 나타냅니다.

전역 범위

this;
로그인 후 복사

모든 범위에서 사용되면 전역 개체를 가리킵니다.

함수 호출

foo();
로그인 후 복사

여기서도 전역 개체를 가리킵니다.

메서드 호출

test.foo();
로그인 후 복사

이 예에서 이는 테스트 개체를 가리킵니다.

생성자 호출

new foo();
로그인 후 복사

함수가 new 키워드와 함께 사용되는 경향이 있는 경우 이 함수를 생성자라고 부릅니다. 함수 내에서 이것은 새로 생성된 객체를 가리킵니다.

이를 명시적으로 설정

function foo(a, b, c) {}

var bar = {};
foo.apply(bar, [1, 2, 3]); // 数组将会被扩展,如下所示
foo.call(bar, 1, 2, 3); // 传递到foo的参数是:a = 1, b = 2, c = 3
로그인 후 복사

Function.prototype에서 호출 또는 적용 메서드를 사용하는 경우 함수 내에서 this가 함수 호출의 첫 번째 매개변수로 명시적으로 설정됩니다.

따라서 위의 예에서는 함수 호출 규칙이 더 이상 적용되지 않으며 이는 foo 함수에서 bar로 설정됩니다.


일반적인 오해

대부분의 상황이 사실이지만 첫 번째 규칙(번역자 주: 이는 두 번째 규칙을 의미합니다. 함수를 직접 호출하는 것(전역 객체를 가리킴)은 실제로 사용된 적이 없기 때문에 JavaScript 언어의 또 다른 잘못된 설계로 간주됩니다.

Foo.method = function() {
    function test() {
        // this 将会被设置为全局对象(译者注:浏览器环境中也就是 window 对象)
    }
    test();
}
로그인 후 복사

일반적인 오해는 테스트에서 이것이 Foo 객체를 가리킨다는 것인데 실제로는 그렇지 않습니다.

테스트에서 Foo 객체에 대한 참조를 얻으려면 Foo 객체를 가리키는 메소드 함수 내부에 지역 변수를 생성해야 합니다.

Foo.method = function() {
    var that = this;
    function test() {
        // 使用 that 来指向 Foo 对象
    }
    test();
}
로그인 후 복사

그것은 우리가 무작위로 붙인 이름이지만, 이 이름은 이 물체의 외부를 가리키는 데 널리 사용됩니다. Closures 섹션에서 우리는 이것이 매개변수로 전달될 수 있다는 것을 보았습니다.

참고: 객체의 리터럴 선언 구문에서는 객체 자체를 가리키는 데 사용할 수 없습니다. 따라서 var obj = {me: this}의 me는 obj를 가리키지 않습니다. 이는 위의 5가지 상황에서만 나타날 수 있기 때문입니다. 번역자 주: 이 예에서 브라우저에서 실행하면 obj.me는 window 개체와 동일합니다.

메소드 할당식

또 이상한 점은 변수에 메소드를 할당하는 함수 별칭입니다.

var test = someObject.methodTest;
test();
로그인 후 복사

위의 예에서 test는 일반 함수처럼 호출되므로 함수 내의 this는 더 이상 someObject 개체를 가리키지 않습니다.

늦은 바인딩 기능이 비우호적으로 보이지만 실제로는 프로토타입 상속이 의존하는 토양을 기반으로 합니다.

function Foo() {}
Foo.prototype.method = function() {};

function Bar() {}
Bar.prototype = Foo.prototype;

new Bar().method();
로그인 후 복사

메서드가 호출되면 Bar의 인스턴스 객체를 가리킵니다.


이상은 JavaScript 고급 시리즈의 작동 원리입니다. 더 많은 관련 내용을 보려면 PHP 중국어 사이트(www.php.cn)를 참고하세요!


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 Dec 17, 2023 pm 02:54 PM

WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법

WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 Dec 17, 2023 pm 05:30 PM

WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 Dec 17, 2023 am 09:39 AM

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 Dec 17, 2023 pm 12:09 PM

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법

간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법 간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법 Jan 05, 2024 pm 06:08 PM

간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법

JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축 JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축 Dec 17, 2023 pm 05:13 PM

JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축

JavaScript에서 HTTP 상태 코드를 쉽게 얻는 방법 JavaScript에서 HTTP 상태 코드를 쉽게 얻는 방법 Jan 05, 2024 pm 01:37 PM

JavaScript에서 HTTP 상태 코드를 쉽게 얻는 방법

자바스크립트에서 insertBefore를 사용하는 방법 자바스크립트에서 insertBefore를 사용하는 방법 Nov 24, 2023 am 11:56 AM

자바스크립트에서 insertBefore를 사용하는 방법

See all articles