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中,定义函数有三种方法,分别是函数声明、函数表达式和箭头函数。 函数声明 函数声明是最常见的定义函数的方法,格式如下: function functionName(parameters) { // 函数体 } 其中,functionName为函数的名称,parameters为函数所需的参数,函数体中包含执行的代码。例如: functio…

    JavaScript 2023年5月27日
    00
  • javascript 易错知识点实例小结

    JavaScript 易错知识点实例小结 在编写 JavaScript 代码的过程中,会遇到一些易错的知识点,可能会导致出现预期外的结果,甚至是程序的崩溃。因此,我们需要了解这些易错知识点,并采取正确的措施避免这些问题的发生。在本文中,我们将详细讲解 JavaScript 易错知识点,并提供实例来帮助读者更好地理解。 目录 变量提升 this 关键字 闭包 …

    JavaScript 2023年6月10日
    00
  • JavaScript插件化开发教程 (三)

    下面我会详细讲解“JavaScript插件化开发教程 (三)”的完整攻略,包括背景、步骤及相关示例说明。 背景 在开发Web应用程序时,我们经常需要封装一些可重用的组件以提高开发效率,这时候插件化开发的思想就显得尤为重要。本教程将教会你如何使用JavaScript实现插件化开发。 步骤 步骤一:实现选项参数(options) 首先,我们需要实现一个选项参数(…

    JavaScript 2023年5月18日
    00
  • 基于原生JavaScript实现SPA单页应用

    基于原生JavaScript实现SPA单页应用攻略 简介 单页应用(Single Page Application,SPA)是一种基于Web浏览器的应用程序,整个应用程序只有一个HTML文件,页面切换时通过ajax与后端进行数据交互,然后动态更新Dom元素,从而实现页面的切换。 原生JavaScript是指不依赖第三方框架或库,只使用纯JavaScript进…

    JavaScript 2023年6月11日
    00
  • JavaScript对象拷贝与赋值操作实例分析

    JavaScript对象拷贝与赋值操作实例分析 在JavaScript中,对象的赋值与拷贝是一个非常重要的话题。这篇文章将会分析对象的赋值与拷贝两种操作的差异以及使用场景,并通过实例展示它们的不同表现。 基本数据类型与引用数据类型 在JavaScript中,数据类型可分为基本数据类型和引用数据类型。基本数据类型包括Number、String、Boolean、…

    JavaScript 2023年5月27日
    00
  • js传各种类型参数到Controller层的整理方式

    下面我分享一下“js传各种类型参数到Controller层的整理方式”的攻略。 在前端页面调用Controller层时,我们需要将页面中的数据传给Controller层进行后台处理,这时需要注意参数的类型和格式。一般来说,前端页面向后端Controller层参数传递有以下几种方式:GET方式,POST方式,以及使用Ajax进行传递。不同的传递方式,参数的整理…

    JavaScript 2023年6月10日
    00
  • JavaScript+html5 canvas实现图片破碎重组动画特效

    首先,在网站首页或其他页面中插入一个canvas元素,让用户能够看到动画特效。 <canvas id="myCanvas"></canvas> 然后,使用JavaScript代码写出实现图片破碎重组动画特效的步骤: 加载图片并创建画布 const image = new Image(); // 创建图片对象 ima…

    JavaScript 2023年6月10日
    00
  • JavaScript实现可动的canvas环形进度条

    下面我将详细讲解“JavaScript实现可动的canvas环形进度条”的完整攻略。该攻略的实现需要使用到HTML5的canvas技术。 步骤一:创建canvas 要实现canvas环形进度条,我们首先需要在HTML文档中创建一个canvas元素,代码如下: <canvas id="canvas" width="200&q…

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