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>