Open
Description
显示绑定
在独立调用函数时,this指向调用的当前作用域对象
隐式绑定
如果是obj.foo()这样的方式调用obj对象里的函数foo,那么foo的this就会被隐式绑定到obj上
var obj = {
name:"你的名字是?"
foo:function(){
console.log(obj.name)
}
bar:function(){
console.log(this.name)
}
}
obj.foo()
obj.bar()
this的指向不是在创建时就决定了,而是由执行环境决定的,包括全局环境、对象环境、构造函数环境、事件对象
apply-call-bind
apply和call可以指定this的绑定对象,他们的第一个参数都为this的指向对象
但传入函数的参数call是逐个传入,而apply是传入一个包含参数的数组
let newFn = fn.bind("aaa")
可以通过bind生成一个新的函数,在调用这个函数时,this指向他的参数
当参数传入一个null或者undfined时,this会被绑定到window上
new绑定
通过new调用一个函数(构造器时),this指向创建出来的对象
function foo(name,age){
this.name= name
this.age = age
}
let fn = new foo("张三",18)
绑定的优先级
当两个或多个形式的绑定都出现了,那么应该遵从哪一个哪?
经过测试
new绑定>显式绑定>隐式绑定>默认绑定
箭头函数
箭头函数没有自己的this,箭头函数使用的this是他parentScope中的this