1.call()、apply()、bind() 都是用来重定义 this 这个对象的!
将this的指向改指为括号里的方法的this,传的参数是要改变this指向函数的传参
2.带参数的不同
//'成都','上海'都是传入myfun里
obj.myFun.call(db,'成都','上海');
obj.myFun.apply(db,['成都','上海']); //传参需要数组
obj.myFun.bind(db,'成都','上海')(); //返回值是函数需要加()手动调用
3.call()和apply()功能相同,区别只是传参的不同,apply用的是数组,call一个一个对应传入,就是传入参数队列
obj.myFun.call(db,'成都','上海');
obj.myFun.apply(db,['成都','上海']);
函数被call,apply就改变了就立即调用
4,bind的区别
1.但函数运行bind时,会首先创建一个新方法不会立即调用
2.当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this, 新函数的调用和原来函数的调用一模一样,除了this的指向不一样之外
3.示例:
function say(provice, city) {
console.log('this=', this);
console.log(`我来自${provice}${city}`);
console.log(`我叫${this.username},今年${this.age}岁`);
}
// 2. 创建一个对象
var person = {
username: '老胡',
age: 100
};
// 3. 使用bind的方法创建一个新函数
say.bind(person)('湖南','长沙');
5.总结
1.call()、apply()、bind()的区别说一说?
·首先这三个方法都是为了改变this的指向,
·call和apply的区别就是,call接受的是一系列参数,而apply接受的是一个数组,
·call和apply的返回值是对应函数的返回值,bind返回的是一个新函数需要在bind后加()调用,