JavaScript箭头函数中的this详解

yizhihongxing

标题:JavaScript箭头函数中的this详解

在JavaScript中,this是一个非常重要的关键字,它表示当前上下文中的对象。然而,在箭头函数中,this却和常规的函数有所不同,它的指向更有一些特别之处。下面我们将对JavaScript箭头函数中的this进行详细讲解。

正常函数中的this

在正常函数中,this的指向是根据函数的调用方式来决定的。以下是不同情况下this的指向:

全局范围内:

如果函数在全局范围内被调用,this会指向window对象。

function test() {
  console.log(this); // 输出 window
}
test();

函数作为对象的方法:

当函数作为对象的方法被调用时,this会指向调用该方法的对象。

let obj = {
  name: "John",
  sayName: function() {
    console.log(this.name);
  }
}
obj.sayName(); // 输出 John

构造函数:

当使用构造函数创建一个新对象时,this会指向这个新创建的对象。

function Person(name) {
  this.name = name;
}
let person = new Person("John");
console.log(person.name); // 输出 John

apply和call方法:

apply和call方法可以显式地指定函数的调用对象,并且this会被设置为传递的第一个参数。

function sayName() {
  console.log(this.name);
}
let obj = {name: "John"};
sayName.apply(obj); // 输出 John

箭头函数中的this

与通常的函数不同,箭头函数中的this的指向是词法作用域中的this,而不是函数运行时的调用对象。

let obj = {
  name: "John",
  sayName: function() {
    let func = () => {
      console.log(this.name);
    }
    func();
  }
}
obj.sayName(); // 输出 John

在上述代码中,箭头函数内的this会继承外部函数sayName中的this,即obj对象,所以能够正确地输出name属性为John。

另外,如果箭头函数嵌套在普通函数中,this指向则不会改变。

let obj = {
  name: "John",
  sayName: function() {
    let func = () => {
      console.log(this.name);
    }
    return func;
  }
}
let test = obj.sayName();
test(); // 输出John

上述代码中,由于箭头函数被嵌套在普通函数中,因此this仍然指向外层的普通函数的this。

在使用箭头函数时要注意,它并不适合所有的场景,而是仅适用于那些不需要改变作用域的场景。

总结

本篇攻略详细介绍了JavaScript箭头函数中的this,分别介绍了this在正常函数中的指向和箭头函数中的指向,并给出了两个示例进行说明。需要注意的是,箭头函数并不适合所有的场景,仅适用于不需要改变作用域的场景。通过学习本文,相信你已经对箭头函数中的this有了一个更深入的认识。

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

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

相关文章

  • 使用JS+XML(数据岛)实现分页)

    那么下面就是详细讲解“使用JS+XML(数据岛)实现分页”的完整攻略: 什么是数据岛? 数据岛是一种传输XML数据的技术。通过XML数据岛技术,我们可以将XML数据作为HTML文档的一部分传输到客户端。XML数据岛把XML数据存储在一个特定的DIV元素中,在浏览器页面上隐藏该元素即可,通过JavaScript的DOM操作,即可取得数据,从而实现数据分页的需求…

    JavaScript 2023年6月10日
    00
  • js面向对象的写法

    这里给您介绍js面向对象的写法的完整攻略。 目录 面向对象基本概念 JS面向对象写法 示例说明 1. 面向对象基本概念 在面向对象编程中,我们考虑的对象是真实存在的,或者说虚拟存在的,但是与我们实际的业务有直接关系的实体。比如我们在开发一个购物网站,我们可能会把商品,订单,用户,购物车这些实体看成对象。 在面向对象编程中,我们的关注点是对象之间的关系和交互,…

    JavaScript 2023年5月27日
    00
  • JS Map 和 List 的简单实现代码

    当我们在使用JavaScript的时候,有时候需要使用一些数据类型来进行操作和处理。在这些数据类型中,Map和List就是两个常用的数据类型之一。 什么是Map和List 在JavaScript中,Map是一种用于存储键值对的集合。Map中的键可以是任意类型的值,如字符串、数字甚至是对象,同样的值可以对应于不同的键。而List则是一种由一列元素组成的有序集合…

    JavaScript 2023年6月10日
    00
  • JavaScript简写技巧总结

    JavaScript简写技巧总结 在JavaScript编程中,我们经常需要重复性写出一些代码,而这些代码又过于繁琐,需要减少重复性劳动。同时,还有一些简写技巧,在代码书写过程中可以帮助我们节省时间和代码。下面简要总结一下JavaScript中一些简写技巧。 三目运算符(?) 三目运算符是一种简化代码的方法,可以将普通的if/else语句简写为一行代码。它的…

    JavaScript 2023年6月10日
    00
  • Ajax跨域实现代码(后台jsp)

    下面我来为你详细讲解“Ajax跨域实现代码(后台jsp)”的完整攻略。 简介 在介绍Ajax跨域实现代码前,我们先来了解一下什么是跨域。跨域是指两个不同域名、不同端口、不同协议的网页之间相互访问的情况。同源策略会限制跨域访问,但是在实际开发中,跨域是经常用到的技术,这时候我们需要实现跨域访问。 Ajax实现跨域 Ajax实现跨域有多种方法,其中一种方法是:使…

    JavaScript 2023年6月11日
    00
  • javascript 获取url参数的正则表达式(用来获取某个参数值)

    获取URL参数一直是前端开发的一个常见操作,JavaScript提供了多种方式来实现获取URL参数的功能,其中正则表达式是较为灵活且简单的一种方式。下面是获取URL参数的正则表达式及相应的代码示例: 正则表达式 以下正则表达式可以用来获取某个参数值: function getQueryString(name) { var reg = new RegExp(‘…

    JavaScript 2023年6月10日
    00
  • Js 时间函数getYear()的使用问题探讨

    当我们在使用JavaScript处理时间时,可能会遇到一些问题。其中一个问题是关于getYear()时间函数的使用问题。在本文中,我们将深入探讨这个问题并提供解决方案。 问题描述 在JavaScript中,getYear()时间函数用于获取年份的后两位数字。但是,这个函数有一个问题,它会返回一个相对于 1900 年的年份值。换句话说,如果我们调用getYea…

    JavaScript 2023年5月27日
    00
  • javascript导出csv文件(excel)的方法示例

    下面是关于“javascript导出csv文件(excel)的方法示例”的完整攻略: 一、CSV文件格式介绍 CSV(Comma-Separated Values)就是指逗号分隔符,通常是一种保存矩阵数据的文件格式。每行记录表示一行,以逗号作为分隔符,不同列数据存在不同位置,可以通过表格对齐的方式方便地分辨出来。 例如:下面是一个CSV文件的模板: 姓名,学…

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