1.bind,call,apply 的异同
相同点
- 第一个参数都可以改变this指向,第二个参数可以传参
- 都是Function.prototype的方法,所以每个函数都可以使用bind,call和apply
不同点
- bind是返回绑定this之后的函数,用于稍后调用,call和apply是立即执行
- bind会返回一个新函数,如果以该新函数作为构造函数来创建一个新对象,那么此时this不再指向bind的第一个参数而是指向new出来的实例
- apply的第一个形参之后的参数是一个数组,bind和call的第一个形参之后的参数可以用arguments表示,也可以写成形参列表
2.改变this指向
function fn() {
console.log(this);
}
var obj = {
name: "zs"
}
fn();
fn.bind(obj)();
fn.apply(obj);
fn.call(obj);
3.第二个参数传参
function Cat() {
this.name = 'zs';
this.say = function(age, sex) {
console.log(this.name, age, sex);
}
}
function Mouse(name) {
this.name = name
}
const cat = new Cat()
const mouse = new Mouse('Tom')
cat.say.bind(mouse, 28, '男')();
cat.say.call(mouse, 28, '男');
cat.say.apply(mouse, [28, '男']);
4.知识点
2022-04-29 【总结】this指针总结
2021-05-15 arguments对象的概念和方法