JS函数this的用法实例分析

yizhihongxing

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日

相关文章

  • Express框架req res对象使用详解

    下面是关于“Express框架req res对象使用详解”的完整攻略。 1. HTTP请求(req)对象 Express框架提供了一个request对象(通常缩写为 req),作为每个请求的入口点,它包含了HTTP请求的属性和方法。 1.1 请求路径 req.path属性可用于获取请求的路径,例如: app.get(‘/users/:id’, functio…

    JavaScript 2023年6月11日
    00
  • JavaScript运行过程中的“预编译阶段”和“执行阶段”

    JavaScript代码的运行分为两个阶段:预编译阶段和执行阶段。在预编译阶段,JavaScript引擎会进行一些预处理操作,包括变量声明、函数声明、变量提升等。执行阶段则是按照预处理结果进行实际代码的执行。 预编译阶段 变量声明 在预编译阶段,JavaScript引擎会将代码中所有的变量声明存储到作用域中。例如: console.log(a); // un…

    JavaScript 2023年5月27日
    00
  • 浅谈Ajax相关及其优缺点

    浅谈Ajax相关及其优缺点 什么是Ajax Ajax全称为Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),是一种用于创建现代Web应用的技术。它可以让网页在不刷新的情况下向服务器发送请求,获取数据并作出相应的动态更新。 Ajax的优缺点 优点 异步请求:可以在不刷新页面的情况下与服务器通信,否则需要…

    JavaScript 2023年6月11日
    00
  • JavaScript初级教程(第二课)第1/7页

    第一步:Markdown格式化 在发布文章时,请使用Markdown格式化文本以提高可读性和美观性。以下是一份标准的Markdown格式: JavaScript初级教程(第二课) 第1/7页 目录 课程简介 数据类型 变量和常量 运算符 控制流 函数和方法 常见问题解答 课程简介 JavaScript是一种用于网页开发的编程语言。在本课程中,您将学习Java…

    JavaScript 2023年5月18日
    00
  • Document对象内容集合(比较全)

    对于网站开发者而言,了解Document对象内容集合是相当重要的。这个集合包含了许多的内容,例如文档信息、头部信息、body信息、表单信息、链接信息、脚本等等,下面详细讲解一下。 一、Document信息(document信息集合) Document信息集合提供了一堆有关于文档的重要信息,其中包括文档的标题、URL、网页DOM、脚本代码、cookie、use…

    JavaScript 2023年6月11日
    00
  • BootStrap+Mybatis框架下实现表单提交数据重复验证

    首先,我们需要明确一下实现表单提交数据重复验证的基本思路。我们可以在页面上的表单中增加一个校验码字段,每次提交时,先检测校验码,若校验码匹配成功则将表单数据保存至数据库,否则提示用户“数据已存在”。 下面是实现表单提交数据重复验证的完整攻略: 一、创建数据库表 我们可以先创建一个名为user的数据库表,用来存储用户表单提交数据。以下是该表的基本结构: CRE…

    JavaScript 2023年6月10日
    00
  • 使用script的src实现跨域和类似ajax效果

    使用script的src属性实现跨域和类似ajax效果,是一种常见的解决网页数据获取和展示的方式。下面就具体讲解如何实现。 利用script的src属性解决跨域问题 当在网页中使用script的src属性加载跨域资源时,会受到同源策略的限制,无法直接获取资源。但我们可以通过一些技巧来绕过同源策略的限制,从而实现跨域。 JSONP JSONP是一种常用的跨域解…

    JavaScript 2023年6月11日
    00
  • 浅谈Cookie的生命周期问题

    浅谈Cookie的生命周期问题 在浏览网页时,我们经常会使用到Cookie。Cookie是存放在客户端的一种跨会话保持状态的技术。它可以保存一些用户的操作信息,常用的有登录状态、购物车信息等。在使用过程中,我们需要了解Cookie的生命周期问题。 Cookie的生命周期 Cookie的生命周期指的是从客户端Cookie创建到失效的整个时间段。下面详细介绍Co…

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