call,apply,bind 都是改變上下文的,但是call apply是立即執(zhí)行的,而bind是返回一個改變上下文的函數(shù)副本
call返回的參數(shù)依次傳入,而apply返回的參數(shù)是一個數(shù)組,三個參數(shù)一下call較好,而參數(shù)較多時,apply函數(shù)的返回數(shù)組效率較高
var Person= {
name: "張三",
age: 23
}
function getName(x, y) {
console.log(x + "," + y);
console.log(this);
console.log(this.name);
}
// 將getName()函數(shù)的this改變?yōu)镻erson
getName.apply(Person, [1, 2]);
// aa.call(Person, 4, 5) // call方法
// aa.bind(Person, 4, 5)() // bind返回的是一個函數(shù)副本,所以需要自執(zhí)行一次
/*
*輸出
*1,2
*{name: '張三', age: 23}
*張三
*/