【默认绑定】
即为直接调用,函数调用无调用前缀,则this指向全局对象window(严格模式中指向undefined)
【隐式绑定】
如果函数调用,存在调用的对象,则this会隐式的绑定到这个对象上
function f() {
console.log(this.a);
}
var s = {
a: 1,
fs: f
}
s.fs(); // 输出1
PS:如果将函数作为形参或者赋值给了其他参数,则调用的时候不会发生隐式绑定,而是算作直接调用,this指向全局对象
【显式绑定】
指的是我们通过调用call(),apply(),bind()等方法改变this的行为
PS:bind方法返回一个新的函数对象,而且新的函数对象无法再被修改this指向,call与apply方法相同,但apply方法参数是一个数组,需要先解析一遍数组
【New绑定】
new一个函数,首先根据构造器的prototype属性创建一个新对象,然后执行构造方法,这个时候新对象中的this会指向新对象
【箭头函数的绑定】
箭头函数中的this会寻找到父作用域中this的指向去绑定,且无法改变
【优先级】
显式绑定 > 隐式绑定 > 默认绑定
new绑定 > 隐式绑定 > 默认绑定
【参考文档】