JS中的this指向

91 阅读1分钟

一、this指向

this指向:可以简单理解为函数执行时,所在的“环境”

let obj = {
  a: 2,
  run: function () {
    return this.a;
  }
};
console.log(obj.run());  /// 2

run()所在的“环境”是在obj中花括号中,所以this指向obj

let a = 1;

let obj = {
  a: 2,
  run: function () {
    return this.a;
  }
};
console.log(obj.run());  /// 2

let f = obj.run;

console.log(f()); // 1

f()运行的环境是window,可以看成是window.f(),所以是1

二、箭头函数与this

箭头函数的this指向是被定死的,判断箭头函数this指向就是判断箭头函数外层的this指向

三、call

call(参数1,参数2,参数3...)

参数1是要填的this,剩余参数为函数实参,用逗号隔开

var a = 1;

var obj = {
  a: 2,
  run: function (value) {
    return this.a+value;
  }
};
var f = obj.run;
console.log(obj.run('你好'))
console.log(f.call(obj,'不好')) //2不好

call()方法改变了this指向

四、apply

apply(参数1,[参数2,参数3...]) 用法同call,但是剩余的参数必须放在数组中,参数之间用逗号隔开

五、bind

bind(参数1,参数2,参数3)

参数1:this 剩余的参数用逗号隔开

注意:bind返回的是一个函数,调用时必须在后面加一个括号