call,apply,bind 都是改变上下文的,但是call apply是立即执行的,而bind是返回一个改变上下文的函数副本
call返回的参数依次传入,而apply返回的参数是一个数组,三个参数一下call较好,而参数较多时,apply函数的返回数组效率较高
var Person= {
name: "张三",
age: 23
}
function getName(x, y) {
console.log(x + "," + y);
console.log(this);
console.log(this.name);
}
// 将getName()函数的this改变为Person
getName.apply(Person, [1, 2]);
// aa.call(Person, 4, 5) // call方法
// aa.bind(Person, 4, 5)() // bind返回的是一个函数副本,所以需要自执行一次
/*
*输出
*1,2
*{name: '张三', age: 23}
*张三
*/