详细讲解JavaScript中的this绑定

yizhihongxing

详细讲解JavaScript中的this绑定

在JavaScript中,this用于指向当前对象,也就是函数执行时的上下文对象。this的指向在不同的情境下会被绑定到不同的对象上,因此在使用this时,必须了解其绑定机制。

1. 普通函数中的this

在普通函数中,this的指向由调用方式决定。如果是作为属性方法调用,this指向该属性所在的对象;如果作为普通函数调用,this会指向全局对象。

示例1:

let name = 'globaName';

function fn() {
  console.log('this.name:', this.name);
}

fn();         // this.name: globaName

let obj = {
  name: 'objName',
  sayName: fn
};

obj.sayName();  // this.name: objName

2. 箭头函数中的this

在箭头函数中,this的指向与外层的代码块的this保持一致。换句话说,箭头函数的this是词法作用域而非动态作用域。

示例2:

let name = 'globalName';

let obj = {
  name: 'objName',
  sayName: () => {
    console.log('this.name:', this.name);
  }
};

obj.sayName();  // this.name: globalName

3. bind、call、apply改变this绑定

bind、call、apply这些方法可以修改函数的this指向。这些方法不会改变函数的原始绑定。

示例3:

let name = 'globalName';

function fn() {
  console.log('this.name:', this.name);
}

let obj = { name: 'objName' };

fn.call(obj);    // this.name: objName

let fnObj = fn.bind(obj);
fnObj();         // this.name: objName

4. 构造函数中的this

在构造函数中,this指向当前实例对象。注意:构造函数不应该有返回值,否则会影响this指向。

示例4:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

let person1 = new Person('Tom', 18);
console.log(person1.name);    // Tom
console.log(person1.age);     // 18

5. DOM事件回调函数中的this

在DOM事件的回调函数中,this指向的是触发该事件的DOM节点。

示例5:

<p onclick="console.log('this:', this);">点击我</p>

当用户点击该p标签时,this指向的就是该p元素。

以上是关于JavaScript中this绑定的详细讲解。希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详细讲解JavaScript中的this绑定 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 关于取不到由location.href提交而来的上级页面地址的解决办法

    在 JavaScript 代码中,可以使用 document.referrer 获取到引用当前页面的上级页面的地址,但是无法获取由 location.href 提交而来的上级页面的地址。在这种情况下,需要通过其他方式解决。 一种可行的解决方法是在跳转链接的时候,将上级页面的地址作为参数传递到跳转的页面中。具体实现步骤如下: 在跳转链接中添加参数 <a …

    JavaScript 2023年6月11日
    00
  • JS判断表单输入是否为空(示例代码)

    JS判断表单输入是否为空是前端开发中常用的一种技巧,可以通过JS代码来判断用户是否填写了表单输入框,从而提高用户体验和数据输入的准确性。下面将详细讲解如何使用JS判断表单输入是否为空,以及一些示例代码和注意事项。 判断表单输入是否为空 JS判断表单输入是否为空的核心代码如下所示: var input = document.getElementById(&qu…

    JavaScript 2023年6月10日
    00
  • JavaScript高级教程之如何玩转箭头函数

    JavaScript高级教程之如何玩转箭头函数 介绍 箭头函数是ES6引入的新概念,它可以更方便地创建匿名函数,比传统的函数表达式更加简洁。本文将介绍箭头函数的使用,包括语法、应用场景、this指向和与传统函数表达式等的区别。 语法 箭头函数的语法如下: (param1, param2, …, paramN) => { statements } 或 (…

    JavaScript 2023年5月27日
    00
  • JavaScript实现简单进度条效果

    JavaScript实现简单进度条效果,可以通过改变进度条的宽度或者高度来实现。下面是实现的步骤: 步骤1. 创建HTML布局 进度条需要创建一个父容器,然后再创建一个子容器来表示进度。代码如下: <div class="progress-bar"> <div class="progress">…

    JavaScript 2023年6月11日
    00
  • 详解原生JS动态添加和删除类

    下面就详细讲解一下“详解原生JS动态添加和删除类”的完整攻略。 概述 在前端开发中,动态改变元素的样式是十分常见的需求,其中动态添加类名和动态删除类名就是两种常见的实现方式。通过动态改变元素的类名,可以轻松实现样式的交互效果和动画效果。 动态添加类名 方法一:使用Element.classList方法 Element.classList是DOM API提供的…

    JavaScript 2023年6月10日
    00
  • JS小球抛物线轨迹运动的两种实现方法详解

    JS小球抛物线轨迹运动的两种实现方法详解 抛物线是物理学中比较重要的概念,它被广泛应用于不同领域,例如火箭的轨迹控制,弹道导弹的飞行轨迹等。在Web开发中,利用抛物线动画效果能够使页面更加生动有趣。下面我们将介绍两种不同的实现方法,详细讲解如何实现JS小球抛物线轨迹运动。 方法1:利用定时器 要实现小球的抛物线轨迹运动,我们可以利用数学公式来实现小球的位置计…

    JavaScript 2023年5月28日
    00
  • vue-cli3+typescript新建一个项目的思路分析

    下面我将给你详细讲解“vue-cli3+typescript新建一个项目的思路分析”的完整攻略: 1. 确定项目名称和路径 首先,你需要在你的电脑上安装 Node.js 和 Vue CLI。假设你已经完成这些步骤,那么接下来你需要确定你的项目名称和路径。在这里,我们假设你的项目名称为 “my-vue-project”,你希望将其放在桌面上的 “project…

    JavaScript 2023年6月11日
    00
  • JS动态获取当前时间,并写到特定的区域

    当我们需要在网页上展示当前时间的时候,我们可以使用JavaScript来获取当前时间,并将其动态写入到指定的区域中。 以下是实现该功能的步骤: 首先需要在html文件中创建一个用于展示时间的区域,比如 <div id=”time”></div>。 使用JavaScript中的Date对象获取当前时间。例如,可以使用以下代码获取当前时间…

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