箭头this指向, call apply bind

普通函数this VS 箭头函数this

  • 普通函数中的this表示调用此函数时的对象,可以通过bind,call,apply,改变this指向
  • 箭头函数没有自己的this,箭头函数并不会创建其自身的执行上下文,所以箭头函数的this取决于它的外部函数
    它的this是从自己的作用域链的上一层继承而来,默认指向在定义它是所处的对象(宿主对象的this),bind,call,apply只能调用传递参数,不可修改this指向
let x=11
let obj = {
  x:22,
  methods:{
    x:33,
    say: function(){
      console.log(this.x)
    },
    say1: ()=>{
        console.log(this.x)
    }
  }
}
obj.methods.say() // 33 普通函数this表示调用此函数时的对象即methods对象
obj.methods.say1() //11 say1中this所在的外层代码块是methods对象,methods对象中的this此时是windows
var btn={}
btn.onclick = function(){
 setTimeout(function(){
    console.log(this) // this指向window
  },100)
  setTimeout(() => {
    console.log(this) // 在定义的时候this已将绑定至宿主函数的this即btn对象
  },1000)
} 
btn.click()
let obj2 = {
    a: 10,
    b: function(n) {
        let f = (n) => n + this.a;
        return f(n);
    },
    c: function(n) {
        let f = (n) => n + this.a; // this指向obj2, call改变不了其指向
        let m = {
            a: 20
        };
        return f.call(m,n);
    }
};
console.log(obj2.b(1));  // 11
console.log(obj2.c(1)); // 11 

call apply bind 区别

功能上是没有区别,都是改变this的指向,主要区别在于方法的实现和参数传递上的不同。 call 和 apply都是在调用后立即执行。而bind调用之后需要再调用一次
①:函数.call(对象,arg1,arg2....)
②:函数.apply(对象,[arg1,arg2,...])
③:var ss=函数.bind(对象,arg1,arg2,....)

参考:https://www.jianshu.com/p/59be0fc4f4a6

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。