箭头函数中this的指向问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了箭头函数中this的指向问题相关的知识,希望对你有一定的参考价值。
参考技术A let obj =name:'张三',
age:20,
sayHi()
return
// 箭头函数中的this,指向外层方法中的this
sayHello:()=>
console.log(this.name,this.age);
,
girl:
// 注意:由于箭头函数中的this,执行外层方法中的this,当前箭头函数的外层已经没有方法了
// 所以,this指向window
// 所以,这个方法就不适合定义成箭头函数,改成普通函数,
// 调用该函数时采用call方法修改当前方法里面的this指向
sayHello:function()
console.log('我的男朋友是'+this.name+','+this.age);
// 注意:obj.sayHi()返回的是对象,再去.sayHello()方法,
// sayHello()方法里面的this指向obj.sayHi()放回的是对象
obj,sayHi().sayHello()
obj.girl.sayHello.call(obj)
// var 定义的成员,会自动添加为window对象的成员
var address = '安德门'
var showAddress = function()
console.log(`地点在$this.address`);
let obj1 =
name:'鹿晗',
age:30,
sayHi:function()
console.log(`Hi!我叫$this.name,今年$this.age岁`);
,
showMyFriend:function()
return
name:'关晓彤',
age:20,
sayHi()
console.log(`Hi!我叫$this.name,今年$this.age岁`);
,
showLh:()=>
console.log(`Hi!我的男朋友是$this.name,今年$this.age岁`);
obj1.sayHi()
let obj2 = obj1.showMyFriend()
obj2.sayHi()
obj2.showLh()
// 构造函数不能使用箭头函数定义
// 构造函数里面的this,用于给类定义成员(属性和方法)
function Person(name,age)
this.name = name
this.age = age
this.sayHI = function()
console.log(`大家好!我是 $this.name,今年$this.age岁`);
let p1 = new Person('张三',20)
console.log(p1);
let obj1 =
name:'肖战',
age:20,
sayHI:function()
// 方法里面的this,指向方法的调用者
// 如果一个方法,不是由对象调用执行的,而是直接执行的,那么该方法里面的this就执行window对象
console.log(`Hi!我是 $this.name,今年$this.age岁`);
,
sayHello:()=>
// 箭头函数中没有this,如果在箭头函数中使用了this,会向外层寻找this的指向
// 如果所有的外层都没有this,最终会指向window对象
console.log(`Hello!我是 $this.name,今年$this.age岁`);
obj1.sayHI()
let obj2 =
name:'关晓彤',
age:20
// 可以将obj1的函数传给obj2,其实是obj2的sayHI方法,指向obj1的方法
obj2.sayHI = obj1.sayHI
obj2.sayHI()
// 将obj1身上的函数,传给了一个sayHI变量
let sayHI = obj1.sayHI
window.name = '小明'//设置window对象的name属性
window.age = 20//设置window对象的age属性
sayHI()
console.log('-----------------');
obj1.sayHello()
obj2.sayHello = obj1.sayHello
obj2.sayHello()
let sayHello = obj1.sayHello
sayHello()
箭头函数this指向问题
1.this
指向的固定化,并不是因为箭头函数内部有绑定this
的机制,实际原因是箭头函数根本没有自己的this
,导致内部的this
就是外层代码块的this
。正是因为它没有this
,所以也就不能用作构造函数。
2.除了this
,以下三个变量在箭头函数之中也是不存在的,指向外层函数的对应变量:arguments
、super
、new.target
。
以上是关于箭头函数中this的指向问题的主要内容,如果未能解决你的问题,请参考以下文章