js 改變this指向
- js 改變this 指向
- js中改變this指向的三個方法
- 1.call(this指向,實參1,實參2)
實參可以有無數個,中間用逗號隔開 - 2.apply(this指向,[實參1,實參2])
參數有兩個,一個爲this指向,一個爲類數組 - 3.bind(this指向,實參)(實參)
bind()的實參可以隨意放置
區別:
call()和apply()在改變完this的指向後會自動調用函數
bind()在改變完this的指向後不會自動調用函數,需要手動調用 bind()的第二個()可以調用函數
<script>
//修改this指向
//修改this指向有3個方法 call()、apply()、bind()
//1.call() call(this指向,實參1,實參2) call() 實參可以有無數個,中間用逗號隔開,實參可以沒有
//2.apply() apply(this指向,[實參1,實參2]) apply() 只有兩個參數,一個是要修改的this指向,一個是類數組
//3.bind() bind(this指向,實參)(實參) 實參可以隨意放置
//call()和apply()在改變完this指向後會立即自動調用一次函數
//bind() 在改變完this指向後不會自動調用函數,而是需要手動調用
//call()
function foo(){
console.log(this)//document
}
foo.call(document);
//apply()
function foo1(a1,a2){
console.log(this);//document
console.log(a1);//1
console.log(a2);//2
}
foo1.apply(document,[1,2])
//bind()
//bind()的第二個括號可以調用函數
function foo2(a1,a2){
console.log(this);//document
console.log(a1);//1
console.log(a2);//2
}
foo2.bind(document,1,2)();
//例子: 修改計時器中的this指向
//這個例子,只能用bind()實現,其他兩個方法是實現不了的,因爲只有bind是手動調用的。其他兩個方法自動調用,就做不了延遲的效果
setInterval(function(){
console.log(this)
}.bind(document),3000)
</script>