/*
bind:改变函数this指向,并且不需要立即执行
(比如事件,在被触发的时候才执行)
call:call方法有一个特点是会立即指行函数
apply:也可用于改变this指向,也会立即执行函数
call和apply的对比: 函数需要传参的时候传参的方式不一样
*/
let add=function(){
console.log(this);
}
add();//window
add.call(add);//ƒ (){console.log(this);}
add.call({x:1,y:3});//{x:1,y:3}
let div=document.querySelector('div');
div.onclick=()=>{
console.log(this);
}
let person={
log:()=>{
console.log(this);//window
}
}
person.log.call(person);
/*
bind:改变函数this指向,并且不需要立即执行
(比如事件,在被触发的时候才执行)
*/
let obj={id:3,age:18};
function fn(){
console.log(this);
}
document.onclick=fn.bind(obj);//{id:3,age:18}
/*
apply:也可用于改变this指向
*/
let fn3=function(){
console.log(this);
}
fn3.call({name:'susan'});//{name:'susan'}
/*
call和apply的对比:当函数需要传参的时候传参的方式不一样
*/
let sub=function(a,b){
console.log(this);
}
//call传参错位对应
sub.call({name:'suan'},12,7);
//apply所以实参放在一个数组里面
sub.apply({name:'susan'},[12,7]);
JS (call、bind、apply)改变this指向
最新推荐文章于 2024-09-05 08:47:24 发布