Table of Contents
2. General functions " > 2. General functions
3. Array/Array-like object
4. Immediately execute function
5. Timing Timer and delayer calling functions
6. 事件处理函数
Home Web Front-end JS Tutorial Thoroughly understand the this pointing problem in JavaScript

Thoroughly understand the this pointing problem in JavaScript

Dec 21, 2021 pm 06:28 PM
javascript

This article brings you relevant knowledge about this pointer in JavaScript. The this keyword is a very important grammatical point. I hope everyone has to help.

Thoroughly understand the this pointing problem in JavaScript

1. The relationship between context and this

Pass Understanding the context, we can more clearly understand the pointing problem of this

this’s pointing can be seen as the current context

2. General functions

Let us first take an example to see what this is in a function:

let colors = {
    green : "绿色",
    blue : "蓝色",
    showColors : function() {
        console.log("green: " + this.green  + " blue: " + this.blue);
    }}colors.showColors();let show = colors.showColors;show();
Copy after login

Thoroughly understand the this pointing problem in JavaScript
First The first output is green and blue. At this time, the context of the function is colors, so this points to colors
. The second output is undefined and undefined. At this time, the function is called directly with parentheses, and the context It is window. At this time, this points to window

. Therefore, we can see that the context of the function is this is determined by the way the function is called. .

Common function context situation:

  • The object is marked and calls its method function, then the function context is the marked object, thisPoint to this object
    obj.fun(); The context is obj
  • Call the function directly with parentheses, the context is the window object, this points to the window object

For example:

function fun() {
    return this.a + this.b;}var a = 1;var b = 2;let obj = {
    a : 5,
    b : fun(),
    fun : fun}let res = obj.fun();console.log(res);
Copy after login

Thoroughly understand the this pointing problem in JavaScript
The fun() in b in obj is directly called with parentheses, so at this time fun( ) The context is the window object, so this here points to window, b = 1 2 = 3;
The fun() of obj.fun() is called by obj, so its context is obj, so this here points to obj, so res = 5 3 = 8

3. Array/Array-like object

Array/Array-like object enumeration function To make a call, the context is this array/array-like object
, which can be seen as:

数组[下标](); 调用这个函数的上下文对象就是这个数组
Copy after login

Let us understand it through an example:

let arr = [1, 2, 3, function() {
    console.log(this[0]);}];arr[3]();
Copy after login

Thoroughly understand the this pointing problem in JavaScript
Here is the subscript 3 is a function that enumerates the object with index 3 through the array and then executes it, so its context is this array arr

Array-like object:

  • What is an array-like object?

All objects whose key names are natural number sequences (starting from 0) and have length attributes
For example: argumentsThe object is an array-like object Object, which is the actual parameter list of the function

function fun() {
    arguments[3]();}fun(1, 2, 3, function() {
    console.log(this[0]);})
Copy after login

Thoroughly understand the this pointing problem in JavaScript

Here the function fun is called, but at the same time it is called, a function passed to it is executed. That is, the statement arguments[3](), so this[0] will be output. It is an array-like object that enumerates functions for calling, so its context is arguments, this points to it.


4. Immediately execute function

Immediately execute function (IIFE), its context is the window object, so its this points to window

Let us understand it through an example:

var a = 1;let obj = {
    a : 2,
    fun : (function() {
        let a = this.a;
        return function() {
            console.log(a + this.a);
        }
    })()};obj.fun();
Copy after login

Thoroughly understand the this pointing problem in JavaScript
obj.fun()As mentioned above, fun() is called by obj, so here this points to obj;
fun in obj is equal to the return value of an immediately executed function,
is equivalent to

obj = function() {
    console.log(a + this.a);}
Copy after login

where this points to is obj, so this.a = 2;
In this immediate execution function, its context object is window, so its this points to window, so let a = this.a this points to the window object, so a = 1, so its return value has a = 1;
so the final output is 1 2 = 3

5. Timing Timer and delayer calling functions

In the timer and delayer calling functions, the context object is the window object, and this inside points to the window object

Let us Let’s understand it through an example:

let obj = {
    a : 1,
    b : 2,
    fun : function() {
        console.log(this.a + this.b);
    }}var a = 3;var b = 4;setTimeout(obj.fun, 2000);
Copy after login

Thoroughly understand the this pointing problem in JavaScript
The calling function of setTimeout here is obj.fun, which is called by the delayer Yes, it will run after 2s, so its this points to the window object and outputs 7

If we write this, what will be output?

let obj = {
    a : 1,
    b : 2,
    fun : function() {
        console.log(this.a + this.b);
    }}var a = 3;var b = 4;setTimeout(function() {
    obj.fun();}, 2000);
Copy after login

Thoroughly understand the this pointing problem in JavaScript
此时,setTimeout的第一个参数变成一个匿名函数,此时匿名函数的this指向的是 window 对象;
在匿名函数中obj.fun(),这个fun()是由 obj 调用的,所以此时fun里面的this指向的是 obj,所以输出 3

6. 事件处理函数

事件处理函数的上下文是绑定事件的DOM 元素this指向的是DOM 元素
即:

DOM元素.onclick = function() {
    这里的上下文就是 DOM元素,this指向DOM元素};
Copy after login

让我们来通过一个例子来理解一下:

nbsp;html>
    <meta>
    <meta>
    <meta>
    <title>事件处理函数</title>
    <style>
        p {
            width: 200px;
            height: 200px;
            float: left;
            border: 1px solid #000;
            margin-right: 10px;
        }
    </style>
    <p></p>
    <p></p>
    <p></p>

    <script>
        function show() {
            alert("You click " + this.id);
        }

        let box1 = document.getElementById(&#39;box1&#39;);
        let box2 = document.getElementById(&#39;box2&#39;);
        let box3 = document.getElementById(&#39;box3&#39;);

        box1.onclick = show;
        box2.onclick = show;
        box3.onclick = show;
    </script>
Copy after login

当我们点击构建出来的三个盒子时,弹出的对话框中会输出对应的盒子 id
因为事件处理函数中,this指向的就是对应的DOM 元素

【相关推荐:javascript学习教程

The above is the detailed content of Thoroughly understand the this pointing problem in JavaScript. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
1 months ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat Commands and How to Use Them
1 months ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to implement an online speech recognition system using WebSocket and JavaScript How to implement an online speech recognition system using WebSocket and JavaScript Dec 17, 2023 pm 02:54 PM

How to use WebSocket and JavaScript to implement an online speech recognition system Introduction: With the continuous development of technology, speech recognition technology has become an important part of the field of artificial intelligence. The online speech recognition system based on WebSocket and JavaScript has the characteristics of low latency, real-time and cross-platform, and has become a widely used solution. This article will introduce how to use WebSocket and JavaScript to implement an online speech recognition system.

WebSocket and JavaScript: key technologies for implementing real-time monitoring systems WebSocket and JavaScript: key technologies for implementing real-time monitoring systems Dec 17, 2023 pm 05:30 PM

WebSocket and JavaScript: Key technologies for realizing real-time monitoring systems Introduction: With the rapid development of Internet technology, real-time monitoring systems have been widely used in various fields. One of the key technologies to achieve real-time monitoring is the combination of WebSocket and JavaScript. This article will introduce the application of WebSocket and JavaScript in real-time monitoring systems, give code examples, and explain their implementation principles in detail. 1. WebSocket technology

How to use JavaScript and WebSocket to implement a real-time online ordering system How to use JavaScript and WebSocket to implement a real-time online ordering system Dec 17, 2023 pm 12:09 PM

Introduction to how to use JavaScript and WebSocket to implement a real-time online ordering system: With the popularity of the Internet and the advancement of technology, more and more restaurants have begun to provide online ordering services. In order to implement a real-time online ordering system, we can use JavaScript and WebSocket technology. WebSocket is a full-duplex communication protocol based on the TCP protocol, which can realize real-time two-way communication between the client and the server. In the real-time online ordering system, when the user selects dishes and places an order

How to implement an online reservation system using WebSocket and JavaScript How to implement an online reservation system using WebSocket and JavaScript Dec 17, 2023 am 09:39 AM

How to use WebSocket and JavaScript to implement an online reservation system. In today's digital era, more and more businesses and services need to provide online reservation functions. It is crucial to implement an efficient and real-time online reservation system. This article will introduce how to use WebSocket and JavaScript to implement an online reservation system, and provide specific code examples. 1. What is WebSocket? WebSocket is a full-duplex method on a single TCP connection.

JavaScript and WebSocket: Building an efficient real-time weather forecasting system JavaScript and WebSocket: Building an efficient real-time weather forecasting system Dec 17, 2023 pm 05:13 PM

JavaScript and WebSocket: Building an efficient real-time weather forecast system Introduction: Today, the accuracy of weather forecasts is of great significance to daily life and decision-making. As technology develops, we can provide more accurate and reliable weather forecasts by obtaining weather data in real time. In this article, we will learn how to use JavaScript and WebSocket technology to build an efficient real-time weather forecast system. This article will demonstrate the implementation process through specific code examples. We

How to use insertBefore in javascript How to use insertBefore in javascript Nov 24, 2023 am 11:56 AM

Usage: In JavaScript, the insertBefore() method is used to insert a new node in the DOM tree. This method requires two parameters: the new node to be inserted and the reference node (that is, the node where the new node will be inserted).

Simple JavaScript Tutorial: How to Get HTTP Status Code Simple JavaScript Tutorial: How to Get HTTP Status Code Jan 05, 2024 pm 06:08 PM

JavaScript tutorial: How to get HTTP status code, specific code examples are required. Preface: In web development, data interaction with the server is often involved. When communicating with the server, we often need to obtain the returned HTTP status code to determine whether the operation is successful, and perform corresponding processing based on different status codes. This article will teach you how to use JavaScript to obtain HTTP status codes and provide some practical code examples. Using XMLHttpRequest

JavaScript and WebSocket: Building an efficient real-time image processing system JavaScript and WebSocket: Building an efficient real-time image processing system Dec 17, 2023 am 08:41 AM

JavaScript is a programming language widely used in web development, while WebSocket is a network protocol used for real-time communication. Combining the powerful functions of the two, we can create an efficient real-time image processing system. This article will introduce how to implement this system using JavaScript and WebSocket, and provide specific code examples. First, we need to clarify the requirements and goals of the real-time image processing system. Suppose we have a camera device that can collect real-time image data

See all articles