关于this关键字的理解,可以用一句话概括:this指向的是当前函数所绑定的上下文对象。
1、在全局作用域中访问this,它指向的是window对象。
2、在一个函数里面访问this,如果函数默认被执行的情况下,它内部所访问的this仍然指的是window对象。
3、有一种情况在es6里面的严格模式下,函数在它默认被执行的情况下,它内部所访问的this是undefined。
4、在回调函数里面(默认被执行)像setTmeiut,setInterval这样的回调函数,它内部所访问的this指向的window。
5、如果通过一个对象的成员函数来进行访问的话,在它的内部,this指向的是当前这个对象。
6、除此之外,this可以通过其他方式来改变。比如在执行函数时使用call,apply函数执行时,所传递的第一个参数,就是指明 你在函数内部的this所访问到的上下文对象。
7、预先通过bind进行绑定。例如,在一个类的内部写了一个setTimeout,想要让setTimeout回调函数内部的this指向的是当前类的实例,可以在setTimeout里面传入的函数 绑定上下文对象就是当前类的实例,这样在它的内部所访问的对象就是当前类的实例。
8、针对上述情况es6中不用绑定,如果回调函数是箭头函数this就是指当前类的实例。
9、如果函数绑定了一个对象,又通过其他方式传了一个函数,this是指绑定的对象而不是传的对象,bind关键字的优先级高(都是指绑定的对象)