JS函数this的用法实例分析

JS函数this的用法实例分析

在JavaScript中,每个函数都有一个被称为this的上下文对象。这个对象是函数的执行环境,这个对象的值取决于函数的调用方式。this的用法是JavaScript中比较棘手的一个话题之一。在本篇文章中,我们将深入研究this的用法,并通过两个实例来帮助读者更好地理解它的使用。

什么是this?

在JavaScript中所有函数都有一个this对象,用于表示函数的执行上下文。this的值在函数调用时确定。根据调用方式的不同,它会指向不同的对象。如何调用函数决定了this的值,下面介绍几种情况。

this指向哪里?

1. 函数作为普通函数调用时

当函数作为普通函数调用时,this指向的是全局对象window

function test() {
  console.log(this);
}

test(); // window

2. 函数作为对象方法调用时

当函数作为对象方法调用时,this指向的是这个对象。

var person = {
  name: 'John',
  age: 25,
  sayHello: function() {
    console.log(this);
  }
};

person.sayHello(); // {name: "John", age: 25, sayHello: ƒ}

3. 函数作为构造函数调用时

当函数作为构造函数调用时,this指向的是构造函数创建的新对象。

function Person(name) {
  this.name = name;
  this.sayHello = function() {
    console.log(this);
  };
}

var person = new Person('John');
person.sayHello(); // {name: "John", sayHello: ƒ}

4. 函数作为 Function.prototype.call 或 Function.prototype.apply 被调用时

当函数作为Function.prototype.callFunction.prototype.apply被调用时,this指向的是第一个参数。

function greet() {
  console.log(`Hello, ${this.name}!`);
}

var person = { name: 'John' };
greet.call(person); // Hello, John!

实例分析

1. 点击按钮打印出当前按钮所在的section的id值

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>JS函数this的用法实例分析</title>
    <style>
        section {
            background-color: pink;
            width: 300px;
            height: 200px;
            margin: 20px auto;
        }
        button {
            margin-top: 10px;
        }
    </style>
</head>
<body>
    <section id="section1">
        <h2>Section1</h2>
        <button onclick="logSectionId()">Click Me</button>
    </section>
    <section id="section2">
        <h2>Section2</h2>
        <button onclick="logSectionId()">Click Me</button>
    </section>
    <script>
        function logSectionId() {
            console.log(this.parentElement.id);
        }
    </script>
</body>
</html>

在这个例子中,我们有两个section和两个按钮。点击按钮会调用logSectionId函数,并打印出按钮所在的sectionid属性值。事件处理函数不需要event参数,this指向的是被点击按钮的HTMLButtonElement元素,parentElement指向的是按钮的父元素section元素。

2. div下面有多个span元素,点击span元素弹出该元素的innerHTML值

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>JS函数this的用法实例分析</title>
    <style>
        div span {
            padding: 10px;
            margin: 5px;
            background-color: pink;
        }
    </style>
</head>
<body>
    <div onclick="logInnerHTML(event)">
        <span>span1</span>
        <span>span2</span>
        <span>span3</span>
    </div>
    <script>
        function logInnerHTML(event) {
            console.log(event.target.innerHTML);
        }
    </script>
</body>
</html>

在这个例子中,我们有一个div和三个span元素。点击span元素会调用logInnerHTML函数,并打印出当前点击的span元素的innerHTML值。事件处理函数需要event参数,this指向的是div元素,event.target指向的是当前点击的span元素。

总结

this是JavaScript中一个重要的概念,它的值取决于函数被调用的方式。在第一个实例中,this的值指向被点击的按钮的HTMLButtonElement元素,这个例子就展示了函数作为事件处理函数的情况。在第二个实例中,this的值指向了被点击的span元素的父节点,也就是div元素,展示函数位于事件处理函数外部的情况。熟练掌握JavaScript中this的用法可以使代码更加简洁和易于维护。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS函数this的用法实例分析 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 一文了解JavaScript闭包函数

    一文了解JavaScript闭包函数 JavaScript中的闭包函数是一种常见的概念,尤其常用于前端开发中。本文将对闭包函数进行详细讲解,帮助更好地理解它的概念和使用方法。 什么是JavaScript闭包函数? 在了解什么是闭包函数之前,我们先要了解嵌套函数的概念。在JavaScript中,我们可以在一个函数内部定义另一个函数,这个内部函数就是嵌套函数。 …

    JavaScript 2023年5月27日
    00
  • js通过地址栏给action传值(中文乱码全是问号)

    当我们通过地址栏传递参数给 action 时,由于中文默认编码方式是 UTF-8,而 action 接收到的参数为 GBK 编码方式,导致中文乱码问题。下面是完整的攻略步骤: 1. 使用 JavaScript 的 escape() 函数编码传递的中文参数 escape() 函数可以将字符串进行编码,使其在传输时不受特殊字符的影响。我们可以将要传递的中文参数使…

    JavaScript 2023年5月19日
    00
  • 异步安全加载javascript文件的方法

    异步安全加载JavaScript文件是指在保证网页性能和用户体验的同时,确保JavaScript代码能够无误地执行。下面是异步安全加载JavaScript文件的方法: 1. 异步加载JavaScript文件 异步加载JavaScript文件可以使用HTML5中的script标签,并且设置async属性。这样浏览器会异步加载脚本,不会阻塞网页的渲染,同时脚本在…

    JavaScript 2023年5月27日
    00
  • 详解JS转换数值函数Number()、parseInt()、parseFloat()

    详解JS转换数值函数Number()、parseInt()、parseFloat() 前言 在JavaScript中,数值转换是很常见的操作。例如,用户输入的内容可能是字符串类型,而你需要将其转换成数值类型,或者你需要将数值类型转换为字符串类型,以便于存储或展示。为此,JavaScript提供了一些原生的函数用于进行数值类型之间的转换。其中,最常用的三个函数…

    JavaScript 2023年5月27日
    00
  • ES6数组的扩展详解

    ES6数组的扩展详解 在ES6中,数组的概念得到了进一步扩展和完善,提供了一些新的方法和语法糖,使得开发人员在对数组进行操作时具有更多的便利性。 扩展运算符 在ES6中,一个新的运算符…被引入,称为扩展运算符(spread operator)。扩展运算符可以将数组展开为一系列的参数,方便我们对多个参数进行操作。 示例1:合并数组 const arr1 =…

    JavaScript 2023年5月27日
    00
  • JS 实现获取验证码 倒计时功能

    获取验证码倒计时功能在网页中使用得非常广泛,下面我将介绍JS如何实现这个功能,主要分为两个步骤:发送验证码请求和倒计时显示。 发送验证码请求 一般情况下,获取验证码的请求会发送给后端,后端会去生成验证码并发送给前端。前端只要在发送请求时携带相应的参数即可,下面是一个使用AJAX发送验证码请求的示例: // 获取验证码按钮点击事件 $(‘#get-verify…

    JavaScript 2023年6月11日
    00
  • js事件冒泡、事件捕获和阻止默认事件详解

    JS事件冒泡、事件捕获和阻止默认事件 事件冒泡 事件冒泡是指当一个元素触发了某个事件时,该事件会从子元素一直冒泡到祖先元素。例如,当一个按钮被点击时,点击事件会首先被触发,然后该事件会向外冒泡,一直到文档根节点才停止。 事件捕获 事件捕获是指当一个元素触发了某个事件时,该事件会从祖先元素一直捕获到子元素。例如,当一个按钮被点击时,点击事件会从文档根节点开始捕…

    JavaScript 2023年6月10日
    00
  • JS中的箭头函数

    在JavaScript中,箭头函数是一种简化的函数语法,它在ES6(ECMAScript 2015)引入。箭头函数的语法比传统的function表达式更简洁,同时还有一些特性,例如继承外部作用域的this值。 箭头函数的基本语法如下: (param1, param2, …, paramN) => { statements } (param1, pa…

    JavaScript 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部