this指向
- this指向取决于该对象所声明的环境
- 以函数的形式调用时,函数生命在全局中,this指向window
- 以方法形式调用时,this指向调用方法的对象
- 构造函数中,this指向新创建的对象
/*
改变this指向:
apply()方法: apply(obj,args1,args2,...) this指向apply的第一个参数obj
call() 方法: call(obj,[args1,args2,...]) thsi指向apply的第一个参数obj,函数的第二个参数是数组
bind() 方法:会返回一个新的函数
可以为新函数绑定this,可以为新函数绑定参数
通过bind()方法绑定的this,无法改变
箭头函数:本身无this,由外层作用域决定
也无法通过apply、call、bind改变this绑定
本身无arguments隐藏参数
区别:
apply和call会立刻执行,bind不会立刻执行,会返回一个新的函数。
apply()和call()会调用函数,bind()不会调用函数
主要应用场景:
call()常做继承
apply()常和数组,伪数组有关,例如用数学对象Math求最大最小值
bind()不调用函数但是还想改变this指向,例如改变定时器内部的this
*/
const obj = {name:"小明"}
function fn(a,b){
console.log("ab",a,b)
}
fn.apply(obj,1,2)
fn.call(obj,[1,2])
const newF = fn.bind(obj,1,2)
newF()