改变this指向有三种方法:call apply bind
call和apply的区别是apply是以数组形式改变,bind是和call类似,只不过是在后面加();
var m = 3000;
var obj = {
name:'王五',
m:this.m,
state:function(a,b){
console.log(`${this.name}的长度是${this.m}而${a}的宽度是${b}`)//而a的宽度undefined
}
}
// obj.state.fn();
var skarr={
name:'老刘',
m:40,
}
obj.state()
obj.state.call(skarr,'张三',123)//此时this的指向为老刘的长度是40而张三的宽度是123
如果是换成apply的话,那这个call换成apply时张三,123就必须以数组的形式展现出来;
eg:
obj.state.apply(skarr,[张三,123]);//此时结果和call一样;
obj.state.bind(skarr,'张三',123)();
三种结果都一样,只不过区别不同而已;
大家看完之后可以尝试一下啊