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

基础
没有this、super、arguments 和 new.target 绑定
不能通过 new 关键字调用
没有 prototype
不可以绑定this 的绑定
不支持argument
不支持重复命名参数
疑问

// 第一种 用 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、付费专栏及课程。

余额充值