ES6对象方法声明对象时,箭头函数this的指向问题

本文探讨了箭头函数在JavaScript中的工作原理,特别是在对象方法中的表现。详细解释了箭头函数如何捕获其创建时的上下文,而不是在运行时确定this的值。通过示例对比了普通函数和箭头函数在this指向上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础

  1. 没有this、super、arguments 和 new.target 绑定
  2. 不能通过 new 关键字调用
  3. 没有 prototype
  4. 不可以绑定this 的绑定
  5. 不支持argument
  6. 不支持重复命名参数

疑问

// 第一种 用 var 定义 value  
var value = '小明'

const foo = {
  value: '小红',
  getValue: () => console.log(this.value)
}

foo.getValue() // => 输出的是小明

// 第二种 用 const 定义 value
const value = '小明'
const foo = {
   value: '小红',
   getValue: () => console.log(this.value)
}

foo.getValue() // => undefind

上面两个示例,第一个输出 小明 第二个输出undefined ,都是直接请求的全局的属性,因为const不会自动挂到 window 属性上,因此会输出 undefined。

原因

箭头函数是由声明的时候决定的。

箭头函数 this 的指向(不仅仅是this,其实super, new.target 等)由 外围最近一层非箭头函数决定

在对象声明的时候, value 和 getvalue() 都是 foo的内部属性(方法),则他们的外围自然是全局了。

关键的点在于getvalue:()=>{} 和 getvalue:function(){} 和 getvalue(){} 这三种形式对于方法的声明,应该怎么看待。

后面两个声明方式在功能上是等价的,第三种是es6 新增的简写方式。而第一个箭头函数和两者的却比在于箭头函数本身以及this指向等。

三者在声明的过程中,任然和value 属性一样,是属于foo 内部的,与foo 等价的。

因此在使用箭头函数声明getvalue 方法的时候,this 是由foo 外围决定的,而foo 的外围就是 window ,所以getvalue 的this 指向是window .

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值