改變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)();
三種結果都一樣,只不過區別不同而已;
大家看完之后可以嘗試一下啊