이에 대한 자세한 설명은 JavaScript로
이것은 JavaScript에서 비교적 유연하며, 환경에 따라 또는 동일한 함수가 다른 방식으로 호출되는 경우에 달라질 수 있습니다. 하지만 라는 일반적인 원칙이 있습니다. 즉, 함수를 호출하는 객체를 가리킨다는 것입니다.
시리즈 목차
JavaScript의 클로저(Closure)에 대한 심층 소개
-
-JavaScript의 심층 소개
JavaScript의 프로토타입 체인 및 상속에 대한 심층 소개
다음은 제가 공부한 노트입니다. 8가지 상황으로 나열되어 있습니다.
전역 this(브라우저)
전역 범위에서 이는 일반적으로 브라우저의 창인 전역 객체를 가리킵니다. , 이 개체는 전역 개체입니다.
console.log(this.document === document); // true (document === window.document) console.log(this === window); // true this.a = 37; //相当于创建了一个全局变量a console.log(window.a); // 37
일반 함수의 이(브라우저)
일반 함수 선언 또는 함수 표현식입니다. 함수가 직접 호출되는 경우에도 브라우저에서는 이 객체가 전역 객체를 가리킵니다. 창. 노드에서 이 개체는 전역 개체입니다.
function f1(){ return this; } f1() === window; // true, global object
또 다른 예를 들어보면 읽어보면 매우 명확해질 것입니다.
function test(){ this.x = 1; alert(this.x); } test(); // 1
이것이 전역 개체임을 증명하려면 코드를 일부 변경하세요.
var x = 1; function test(){ alert(this.x); } test(); // 1
실행 결과는 여전히 1입니다. 다시 변경하세요:
var x = 1; function test(){ this.x = 0; } test(); alert(x); //0
그러나 엄격 모드에서 일반 함수가 호출되면 이는 정의되지 않음을 가리키며, 이것이 노드가 엄격 모드를 사용하는 이유 중 하나입니다.
function f2(){ "use strict"; // see strict mode return this; } f2() === undefined; // true
객체 메소드의 함수로
객체 메소드로 사용하는 것이 일반적입니다.
다음 예에서는 객체 리터럴 o를 만듭니다. o에 속성 f가 있습니다. 그 값은 함수 객체입니다. 객체의 메소드로 호출되면 o
var o = { prop: 37, f: function() { return this.prop; } }; console.log(o.f()); // logs 37
객체를 가리킨다. 함수 리터럴처럼 반드시 객체를 정의할 필요는 없다. independent() 함수가 직접 호출되면 이는 창을 가리킬 것이지만 할당을 통해 일시적으로 속성 f를 만들고 함수 개체를 가리킬 때 여전히 37을 얻습니다.
var o = {prop: 37}; function independent() { return this.prop; } o.f = independent; console.log(o.f()); // logs 37
그래서 함수가 어떻게 만들어지든 상관은 없지만 함수가 객체의 메서드로 호출되는 한 이것은 객체를 가리킬 것입니다.
객체 프로토타입 체인의 this
다음 예에서는 먼저 속성 f와 함수가 있는 객체 o를 만듭니다. 객체 속성의 값으로 Object.create(o)를 통해 객체 p를 생성합니다. p는 빈 객체이고 해당 프로토타입은 o를 가리킨 다음 p.a = 1을 사용하여 속성을 생성합니다. 프로토타입에서 메소드 this.a, this.b를 호출하면 여전히 객체 p에서 a와 b를 얻을 수 있습니다. 여기서 주목해야 할 점은 p의 프로토타입이 o라는 것입니다. p.f()를 호출하면 프로토타입 체인에서 f 속성을 호출하여 현재 객체 p를 얻을 수 있습니다.
var o = {f:function(){ return this.a + this.b; }}; var p = Object.create(o); p.a = 1; p.b = 4; console.log(p.f()); // 5
get/set 메소드와 get/set 메소드의 this
는 일반적으로 생성자의 get/set 메소드
function modulus(){ return Math.sqrt(this.re * this.re + this.im * this.im); } var o = { re: 1, im: -1, get phase(){ return Math.atan2(this.im, this.re); } }; Object.defineProperty(o, 'modulus', { //临时动态给o对象创建modules属性 get: modulus, enumerable:true, configurable:true}); console.log(o.phase, o.modulus); // logs -0.78 1.4142
에 있는 객체를 가리킵니다. this
new를 사용하여 MyClass를 생성자로 호출하면 this는 빈 개체를 가리키고 이 개체의 프로토타입은 MyClass.prototype을 가리킵니다(프로토타입 체인 요약은 이 문서 참조). , 그러나 호출 당시 this.a = 37 의 할당이 이루어졌으므로 결국 this 를 반환 값으로 사용하게 됩니다(return 문을 작성하지 않거나 return이 기본형인 경우 this 두 번째 예에서는 return 문이 객체를 반환하고 a = 38이 반환 값으로 사용됩니다
function MyClass(){ this.a = 37; } var o = new MyClass(); console.log(o.a); // 37 function C2(){ this.a = 37; return {a : 38}; } o = new C2(); console.log(o.a); // 38
call/apply 메소드와 this
다양한 호출 방법 외에도 함수 개체의 일부 메서드는 호출/적용과 같은 함수 실행을 수정할 수 있습니다.
call이 매개변수를 플랫 방식으로 전달하는 반면 Apply는 배열을 전달한다는 점을 제외하면 호출과 적용 사이에는 기본적으로 차이가 없습니다. 아래 예시
언제 전화상담 및 신청을 해야 하나요? 예를 들어 Object.prototype.toString을 호출하고 싶지만 특정 this를 지정하려는 경우 Object.prototype.toString.call(this)을 사용하여 직접 호출할 수 없는 메서드를 호출할 수 있습니다. 다음 예를 들어보세요.
function add(c, d){ return this.a + this.b + c + d; } var o = {a:1, b:3}; add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16 //第一个参数接收的是你想作为this的对象 add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34 function bar() { console.log(Object.prototype.toString.call(this)); } bar.call(7); // "[object Number]"
bind 메소드와
bind 메소드는 es5부터 제공되므로 ie9+는
function f(){ return this.a; } var g = f.bind({a : "test"}); //想把某个对象作为this的时候,就把它传进去,得到一个新对象g console.log(g()); // test //重复调用的时候,this已经指向bind参数。这对于我们绑定一次需要重复调用依然实现绑定的话,会比apply和call更加高效(看下面这个例子) var o = {a : 37, f : f, g : g}; console.log(o.f(), o.g()); // 37, test //o.f()通过对象的属性调用,this指向对象o;比较特殊的是即使我们把新绑定的方法作为对象的属性调用,o.g()依然会按之前的绑定去走,所以答案是test不是g
Summary
만 지원합니다. 프로젝트 그제서야 이러한 기본 개념이 얼마나 중요한지 깨달았습니다. 하나씩 구현하지 않으면 정말 우연히 함정에 빠질 것입니다. 앞으로는 프로토타입 체인, 범위, 상속, 체인 호출, 규칙성 및 기타 지식도 요약할 것입니다. 팔로우를 환영합니다
위 내용은 JavaScript로 자세히 설명되어 있습니다. PHP 중국어 넷(www.php.cn)에 주목하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 오늘날의 디지털 시대에는 점점 더 많은 기업과 서비스에서 온라인 예약 기능을 제공해야 합니다. 효율적인 실시간 온라인 예약 시스템을 구현하는 것이 중요합니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. WebSocket이란 무엇입니까? WebSocket은 단일 TCP 연결의 전이중 방식입니다.

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

사용법: JavaScript에서 insertBefore() 메서드는 DOM 트리에 새 노드를 삽입하는 데 사용됩니다. 이 방법에는 삽입할 새 노드와 참조 노드(즉, 새 노드가 삽입될 노드)라는 두 가지 매개 변수가 필요합니다.

JavaScript는 웹 개발에 널리 사용되는 프로그래밍 언어인 반면 WebSocket은 실시간 통신에 사용되는 네트워크 프로토콜입니다. 두 가지의 강력한 기능을 결합하면 효율적인 실시간 영상 처리 시스템을 만들 수 있습니다. 이 기사에서는 JavaScript와 WebSocket을 사용하여 이 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 첫째, 실시간 영상처리 시스템의 요구사항과 목표를 명확히 할 필요가 있다. 실시간 이미지 데이터를 수집할 수 있는 카메라 장치가 있다고 가정해 보겠습니다.
