前端面試題31----call() bind() apply()
阿新 • • 發佈:2020-12-11
call()、apply()、bind() 都是用來重定義 this 這個物件的
call
- fn.call(所要指向的物件,引數1,引數2,…) 呼叫fn函式並修改this指向
apply
- fn.apply(所要指向的物件,[引數1,引數2,…]) 呼叫fn函式。修改this指向
bind
- bind不會直接呼叫函式 返回一個新的函式 修改了this指向,傳參和call一樣
let obj1={
name:'張三',
age:20,
hobby:['唱歌','跳舞'],
score(math,english,chinese){
console. log(`${this.name}今年${this.age},愛好是${this.hobby[0]}和${this.hobby[1]},他的成績是${math},${english},${chinese}`);
}
}
let obj2={
name:'李四',
age:18,
hobby:['打遊戲','睡覺'],
score(math,english,chinese){
console.log(this.name+math);
}
}
obj1.score.call(obj2,100,100,100);
obj1.score.apply(obj2, [88,88,88]);
let obj3=obj1.score.bind(obj2,60,60,60);
obj3();
通過call、apply和bind修改了obj1中this的指向,使obj1中的this指向obj2