- call 接收多个参数,第一个参数是要指向的对象,后面的参数是方法所需要的形参值,call的第一个参数不传或者是null,undefind,默认传参window全局对象
const obj = {
names: '小明',
fn: function (sex, age) {
console.log(this.names, sex, age);
}
}
const obj2 = {
names: '小红',
}
obj.fn.call(obj2, '女', 19) //小红 女 19
obj.fn.call(this, '女', 19)//undefined "女" 19 this指向window全局对象
- apply 接收两个参数,第一个参数是要指向的对象,第二参数为一个数组,数组里面传方法所需要的形参值,apply的第一个参数不传或者是null,undefind,默认传参window全局对象
const obj = {
names: '小明',
fn: function (sex, age) {
console.log(this.names, sex, age);
}
}
const obj2 = {
names: '小红',
}
obj.fn.apply(obj2,[ '女', 19])
- bind 与前面两者有所区别,区别在于前面两者是自动执行,后者是手动执行,第一个参数不传或是null,undefind,默认传参window全局对象
const obj = {
names: '小明',
fn: function (sex, age) {
console.log(this.names, sex, age);
}
}
const obj2 = {
names: '小红',
}
//调用一次
const fn = obj.fn.bind(obj2, '女', 19)
fn()
//调用多次
const fn2 = obj.fn.bind(obj2)
fn('女', 19)
fn('男', 19)