我的编程空间,编程开发者的网络收藏夹
学习永远不晚

js中不能使用箭头函数的情况是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

js中不能使用箭头函数的情况是什么

这篇文章主要介绍“js中不能使用箭头函数的情况是什么”,在日常操作中,相信很多人在js中不能使用箭头函数的情况是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js中不能使用箭头函数的情况是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    箭头函数

    箭头函数是和我们工作密切相关的东西;可以说箭头函数的诞生,给我们的工作带来了极大的便利。但是箭头函数有什么缺点?什么时候不能使用箭头函数? 这你了解吗?
    我们觉得箭头函数很高级,可以规避 this 的问题,所有的场景下都是用箭头函数。在不能使用的场景下使用了,出现了问题,你还不知道是什么问题,那这不是瞎添乱吗!是不是!

    这里给大家先提出一个问题:

    const obj = {    name: '张三',    getName() {        return this.name    },    getName1: () => {        return this.name    }}obj.__proto__.getName2 = function() {    return this.name}obj.__proto__.getName3 = () => {    return this.name}console.log('普通函数',obj.getName())console.log('普通函数',obj.getName2())console.log('箭头函数',obj.getName1())console.log('箭头函数',obj.getName3())

    大家觉得会输出什么呢?

    先悄悄思考一下!

    3,2,1 公布答案!

    js中不能使用箭头函数的情况是什么

    箭头函数有什么缺点?

    • 没有 arguments,如果要用,可以用 rest 参数代替。 这里我们定义一个箭头函数和一个普通函数还有一个使用 rest 参数的箭头函数:

      const fn1 = () => {    console.log('arguments', arguments)}fn1(100, 200)function fn2(){    console.log('arguments', arguments)}fn2(100, 200)const fn3 = (...values) => {    console.log('values', values)}fn3(100, 200)

      js中不能使用箭头函数的情况是什么

    • 无法通过 apply、call、bind 改变this指向 这里我们在定义一个箭头函数和一个普通函数

      const fn3 = () => {    console.log('this', this)}fn3()function fn4(){    console.log('this', this)}fn4()

      箭头函数的this就是他父容器的this,不是在执行的时候确定的,而是在定义的时候确定的。

      js中不能使用箭头函数的情况是什么

    • 如上图,我们可以发现,箭头函数的两次执行的 this 都是指向了 Windows使用call并没有发生改变,而普通函数第一次是指向了Windows第二次则是变成了我们传入的

    什么时候不能使用箭头函数?

    1. 对象方法中,不适用箭头函数

    const obj = {    name: '张三',    getName() {        return this.name    },    getName1: () => {        return this.name    }}

    我们在对象中定义了普通函数:getName箭头函数 getName1,接下来我们来调用一下:

    console.log('普通函数',obj.getName())console.log('箭头函数',obj.getName1())

    这里给大家默想3s输出什么?

    公布答案:

    js中不能使用箭头函数的情况是什么

    我们发现箭头函数好像并没有获取到值诶!

    为什么对象方法中,箭头函数的this指向不是这个对象?

    • this 永远指向函数的调用者

    • 在箭头函数中,this 指向的是定义时所在的对象,而不是使用时所在的对象。换句话说,箭头函数没有自己的 this,而是继承父作用域中的 this。

    obj.getName()this指向函数的调用者,也就是obj实例,因此this.name = "张三"

    getName1()通过箭头函数定义,而箭头函数是没有自己的this,会继承父作用域的this

    因此obj.getName1()执行时,此时的作用域指向window,而window没有定义age属性,所有报空。

    从例子可以得出:对象中定义的函数使用箭头函数是不合适的

    2. 原型方法中,不适用箭头函数

    const obj = {    name: '张三',}obj.__proto__.getName = function() {    return this.name}obj.__proto__.getName1 = () => {    return this.name}

    我们又又又在对象中定义了普通函数:getName箭头函数 getName1,接下来我们来调用一下:

    console.log(obj.getName())console.log(obj.getName1())

    这里再再再给大家默想3s输出什么?

    bang bang bang 公布答案:

    js中不能使用箭头函数的情况是什么

    为什么?

    出现问题的原因是this指向window对象,这和使用箭头函数在对象中定义方法十分类似。

    3. 构造函数也不行!

    我们又又又定义了普通的构造函数:Foo箭头函数 Foo1,接下来我们来调用一下:

    function Foo (name, sex) {    this.name = name    this.sex = sex}const Foo1 = (name, sex) => {    this.name = name    this.sex = sex}console.log('普通的构造函数:', new Foo('张三', '男'))console.log('箭头函数:', new Foo1('张三', '男'))

    不仅不行,还报错了呢!

    js中不能使用箭头函数的情况是什么

    为什么?

    构造函数是通过 new 关键字来生成对象实例,生成对象实例的过程也是通过构造函数给实例绑定 this 的过程,而箭头函数没有自己的 this。因此不能使用箭头作为构造函数,也就不能通过 new 操作符来调用箭头函数。

    4. 动态上下文中的回调函数

    比如,我们需要给一个按钮添加点击事件:

    const btn1 = document.getElementById('btn1')btn1.addEventListener('click', () => {    this.innerHTML = 'clicked'})

    如果我们在回调中不需要使用到 this,那就啥问题也没有,但是!使用到了 this,那么问题就大大的了!

    为什么呢?

    箭头函数的 this 指向的是他的父作用域(这里就指向了 window),而不是指向这个button。这时候我们需要使用普通函数才可以。

    5. Vue 生命周期和 method 中也不能使用箭头函数

    js中不能使用箭头函数的情况是什么

    为什么不行呢?

    Vue 本质上是一个对象,我们说过对象方法中,不适用箭头函数。他的本质上的和对象方法中,不适用箭头函数是一样的。

    那么我有一个问题: Vue不行,作为大热框架之一的 react 行吗?

    回答是: react 行

    因为 Vue组件本质上是一个 JS 对象;React 组件(非Hooks)他本质上是一个 ES6 的 class

    不信的话我们测试一下就知道了

    class Man {    constructor(name, city) {        this.name = name        this.city = city    }    getName = () => {        return this.name    }}const f = new Man('李四','上海')console.log(f.getName())

    js中不能使用箭头函数的情况是什么

    划重点

    • 要熟练使用箭头函数,也要对函数 this(重点) 敏感

    • Vue组件本质上是一个 JS 对象;React 组件(非Hooks)他本质上是一个 ES6 的 class,两者不同

    到此,关于“js中不能使用箭头函数的情况是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    js中不能使用箭头函数的情况是什么

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    js中不能使用箭头函数的情况是什么

    这篇文章主要介绍“js中不能使用箭头函数的情况是什么”,在日常操作中,相信很多人在js中不能使用箭头函数的情况是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js中不能使用箭头函数的情况是什么”的疑惑有所
    2023-07-02

    JS箭头函数的语法是什么及怎么使用

    本篇内容介绍了“JS箭头函数的语法是什么及怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!JavaScript的箭头函数随着ECMAS
    2023-07-04

    PHP switch语句中不使用break的情况是什么

    这篇文章主要讲解了“PHP switch语句中不使用break的情况是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP switch语句中不使用break的情况是什么”吧!为什么不使
    2023-07-05

    js中eval()函数的作用是什么

    eval()函数在JavaScript中的作用是将传入的字符串作为代码进行解析和执行。它可以执行任意的JavaScript代码,并返回执行结果。eval()函数可以用于动态执行代码、动态创建函数、动态解析JSON等。通过eval()函数,可
    2023-08-09

    js split函数的使用方法是什么

    JavaScript中的split()函数用于将一个字符串分割成一个子字符串数组,然后返回该数组。split()函数接受一个分隔符作为参数,根据该分隔符将原始字符串分割成多个子字符串并存储在数组中。语法:string.split(sep
    js split函数的使用方法是什么
    2024-03-01

    Linux中监控磁盘分区和使用情况的工具是什么

    Linux中监控磁盘分区和使用情况的工具是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。我们将讨论Linux中可用于监视磁盘使用情况的命令行实用程序,提供有关总大小容量、已
    2023-06-28

    python str()函数的功能是什么及怎么使用

    Python的`str()`函数用于将其他类型的变量转换为字符串类型。使用方法如下:```str(value)```其中,`value`是需要转换为字符串的变量。示例:```pythonnum = 123print(str(num)) #
    2023-09-21

    useEffect中不能使用async的原理是什么

    本篇内容介绍了“useEffect中不能使用async的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!当页面中使用 useEffe
    2023-07-02

    oracle中round函数的使用方法是什么

    在Oracle数据库中,ROUND函数用于将一个数值四舍五入到指定的小数位数。其基本语法如下:ROUND(numeric_value, decimal_places)其中,numeric_value是要四舍五入的数值,decimal_pl
    oracle中round函数的使用方法是什么
    2024-04-09

    oracle中listagg函数的使用方法是什么

    在Oracle数据库中,LISTAGG函数用于将多行数据合并为单个字符串。其基本语法如下:LISTAGG(column_name, delimiter) WITHIN GROUP (ORDER BY order_column)其中,col
    oracle中listagg函数的使用方法是什么
    2024-04-09

    sql中right函数的使用方法是什么

    在SQL中,RIGHT函数用于返回字符串右侧指定长度的字符。其语法如下:RIGHT(string, length)其中,string是要从右侧截取字符的字符串,length是要截取的字符的长度。例如,要从字符串"Hello, World
    sql中right函数的使用方法是什么
    2024-03-04

    Java中if函数的使用方法是什么

    在Java中,if语句用于控制程序的流程,根据给定的条件执行不同的代码块。if语句的基本语法如下:if (condition) {// 如果条件为真,执行这里的代码块} else {// 如果条件为假,执行这里的代码块(可选)}在if
    Java中if函数的使用方法是什么
    2024-03-12

    oracle中decode函数的使用方法是什么

    在Oracle数据库中,DECODE函数用于根据指定的条件对值进行比较,如果满足条件则返回一个值,否则返回另一个值。DECODE函数的使用方法如下:DECODE(expression, search_value1, return_valu
    oracle中decode函数的使用方法是什么
    2024-03-15

    lua中function函数的使用方法是什么

    在Lua中,可以通过以下方法来定义一个函数:function sayHello()print("Hello, World!")end-- 调用函数sayHello()也可以使用匿名函数的方式定义一个函数,并将其赋值给一个变量:loc
    lua中function函数的使用方法是什么
    2024-04-08

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录