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

JavaScript哪些场景不能使用箭头函数

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

JavaScript哪些场景不能使用箭头函数

1. 定义对象方法

   JS 中对象方法的定义方式是在对象上定义一个指向函数的属性,当方法被调用的时候,方法内的 this 就会指向方法所属的对象。


let obj = {
    array: [1, 2, 3],
    sum: () => {
        console.log(this === window); // true
        return this.array.reduce((result, item) => result + item);
    }
};
console.log(this === window); //true
obj.sum();//报错:Uncaught TypeError: Cannot read property 'reduce' of undefined at Object.sum

  运行时 this.array 是未定义的,调用 obj.sum 的时候,执行上下文里面的 this 仍然指向的是 window,原因是箭头函数把函数上下文绑定到了 window 上,this.array 等价于 window.array,显然后者是未定义的。

  修改方式:使用函数表达式或者方法简写(ES6 中已经支持)来定义方法,这样能确保 this 是在运行时是由包含它的上下文决定的。代码如下:


let obj = {
    array: [1, 2, 3],
    sum() {
        console.log(this === window); // false
        return this.array.reduce((result, item) => result + item);
    }
};
console.log(this === window); //true
console.log(obj.sum());//6

2.定义原型方法

  同样的规则适用于原型方法(prototype method)的定义,使用箭头函数会导致运行时的执行上下文错误。比如下面代码:


function Cat(name) {
    this.name = name;
}

Cat.prototype.sayCatName = () => {
    console.log(this === window); // => true
    return this.name;
};

const cat = new Cat('Tom');
console.log(cat.sayCatName()); // undefined

  使用传统的函数表达式就能解决问题,代码如下所示:


function Cat(name) {
    this.name = name;
}

Cat.prototype.sayCatName = function () {
    console.log(this === window); // => false
    return this.name;
}

const cat = new Cat('Tom');
console.log(cat.sayCatName()); // Tom

  sayCatName 变成普通函数之后,被调用时的执行上下文就会指向新创建的 cat 实例。

3. 定义事件回调函数

  箭头函数在声明的时候就绑定了执行上下文,要动态改变上下文是不可能的,在需要动态上下文的时候它的弊端就凸显出来。

  比如在客户端编程中常见的 DOM 事件回调函数(event listenner)绑定,触发回调函数时 this 指向当前发生事件的 DOM 节点,而动态上下文这个时候就非常有用,比如下面这段代码试图使用箭头函数来作事件回调函数。


const button = document.getElementById('myButton');
button.addEventListener('click', () => {
    console.log(this === window); // true
    this.innerHTML = 'Clicked button';
});

  在全局上下文下定义的箭头函数执行时 this 会指向 window,当单击事件发生时,this.innerHTML 就等价于 window.innerHTML,而后者是没有任何意义的。

  使用函数表达式就可以在运行时动态的改变 this,修正后的代码:


const button = document.getElementById('myButton');
button.addEventListener('click', function () {
    console.log(this === button); // true
    this.innerHTML = 'Clicked button';
});

4. 定义构造函数

  构造函数中的 this 指向新创建的对象,当执行 new Car() 的时候,构造函数 Car 的上下文就是新创建的对象,也就是说 this instanceof Car === true。显然,箭头函数是不能用来做构造函数, 实际上 JS 会禁止你这么做,如果你这么做了,它就会抛出异常。

  比如下面的代码就会报错:


const Message = (text) => {
    this.text = text;
};
const helloMessage = new Message('Hello World!');//报错: Throws "TypeError: Message is not a constructor"

  构造新的 Message 实例时,JS 引擎抛了错误,因为 Message 不是构造函数。可以通过使用函数表达式或者函数声明来声明构造函数修复上面的例子。


const Message = function(text) {
    this.text = text;
};
const helloMessage = new Message('Hello World!');
console.log(helloMessage.text); // 'Hello World!'

以上就是JavaScript哪些场景不能使用箭头函数的详细内容,更多关于JavaScript不能使用箭头函数的资料请关注编程网其它相关文章!

免责声明:

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

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

JavaScript哪些场景不能使用箭头函数

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

下载Word文档

猜你喜欢

详解JavaScript中的箭头函数的使用

这篇文章主要是带大家一起了解一下所有有关JavaScript箭头函数的信息。文中通过示例讲解了如何使用ES6的箭头语法,以及在代码中使用箭头函数时需要注意的一些常见错误,需要的可以参考一下
2022-11-13

PHP 函数的使用场景有哪些?

php 函数主要用于:执行重复性任务(如连接数据库);提高代码模块化和可重用性(如函数化发送邮件);简化复杂操作(如计算时间戳);错误处理(通过尝试/捕获或错误处理函数)。PHP 函数的常见使用场景函数是 PHP 中用于执行特定任务和减少
PHP 函数的使用场景有哪些?
2024-04-18

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

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

PHP 函数有哪些应用场景?

php 函数可简化开发,常见应用场景和实战案例包括:字符串操作:检查长度、转换大小写、替换内容。数值操作:四舍五入、查找最小/最大值。数组操作:计算长度、合并数组、过滤元素。日期和时间操作:获取当前日期、转换字符串为时间戳、获取当前时间戳。
PHP 函数有哪些应用场景?
2024-04-11

C++ 静态函数的使用场景有哪些?

静态函数在 c++++ 中用于与类无关的操作或实用程序功能,包括:效用函数:提供独立的实用程序功能,如字符串操作或数学运算。工厂方法:创建类的新实例,返回指针或引用。常量函数:访问常量数据并确保类状态不变。枚举类型函数:获取枚举值的名称或描
C++ 静态函数的使用场景有哪些?
2024-04-16

JavaScript中this的使用场景有哪些

本篇文章给大家分享的是有关JavaScript中this的使用场景有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。JavaScript是什么JavaScript是一种直译式
2023-06-14

oracle函数的应用场景有哪些

Oracle函数Oracle函数是用于执行特定操作并返回结果的预定义代码块,广泛应用于数据操作、过滤、验证、转换和用户定义扩展。在具体应用场景中,函数可用于:计算财务统计数据分析零售销售模式监控制造过程分析医疗保健数据进行数据可视化、挖掘和自动化等任务。
oracle函数的应用场景有哪些
2024-05-14

C++ 函数的指针参数的使用场景有哪些?

c++++ 函数指针参数的使用场景是:回调函数:将函数传递给其他函数作为回调,以便在某些事件发生时调用。事件处理:使用事件分发系统处理来自不同源的事件。算法排序:使用函数指针作为比较函数传递给排序算法(如 std::sort),从而自定义排
C++ 函数的指针参数的使用场景有哪些?
2024-04-20

php pow函数的应用场景有哪些

计算数学表达式中的幂运算,如计算2的3次方:pow(2, 3)。生成随机数时可用于设置随机数的最小值和最大值,如生成1到100之间的随机数:rand(1, pow(10, 2))。在计算器应用程序中用于实现幂运算功能。用于计算物理学或
php pow函数的应用场景有哪些
2024-03-07

编程热搜

目录