1.call 从第二个参数开始的所有参数都是传给该函数的实参
var a = 9;
var obj = {a: 99};
function f() {
console.log(this.a);
console.log(arguments);
}
f(); //9 arguments为空
f.call(obj); //99 argumnts[]
f.call(obj, 66, 88, 99); //99 argumnts[66,88,99]
2.apply 第二个参数要传递一个数组表示是给该函数传递的实参
var a = 9;
var obj = {a: 99};
function f() {
console.log(this.a);
console.log(arguments);
}
f(); //9 arguments为空
f.apply(obj); //99
f.apply(obj, [66, 88, 99]); //99 argumnts[66,88,99]
3.bind 返回的是函数的引用,需要再次调用。传参和call一样,但也可以调用时再传入
var a = 9;
var obj = {a: 99};
function f() {
console.log(this.a);
console.log(arguments);
}
f(); //9 arguments为空
f.bind(obj, [66, 88, 99])(); //99 argumnts[66,88,99] 可以改变完了之后再调用
f.bind(obj)([66, 88, 99]); //99 argumnts[66,88,99] 也可以改变时调用
三个方法是函数的方法,第一个参数都是该函数改变后的this指向的对象