相同點:都可以改變this的指向
例子:
var zhangsan = {
name: "張三",
gender: "男",
age: 24,
say:function () {
alert(this.name+","+this.gender+",今年"+this.age+"歲");
}
}
var lisi = {
name: "李四",
gender: "女",
age: "18"
}
zhangsan.say.call(lisi);
zhangsan.say.apply(lisi);
zhangsan.say.bind(lisi)();
call的用法
var zhangsan = {
name: "張三",
gender: "男",
age: 24,
say:function (school,grade) {
alert(this.name+","+this.gender+",今年"+this.age+"歲"+"在"+school+"上"+grade);
}
}
var lisi = {
name: "李四",
gender: "女",
age: "18"
}
zhangsan.say.call(lisi,"實驗小學","六年級");
call後面的參數與方法一一對應
apply
var zhangsan = {
name: "張三",
gender: "男",
age: 24,
say:function (school,grade) {
alert(this.name+","+this.gender+",今年"+this.age+"歲"+"在"+school+"上"+grade);
}
}
var lisi = {
name: "李四",
gender: "女",
age: "18"
}
zhangsan.say.call(lisi,["實驗小學","六年級"]);
apply後面傳入的是一個數組
bind
var zhangsan = {
name: "張三",
gender: "男",
age: 24,
say:function (school,grade) {
alert(this.name+","+this.gender+",今年"+this.age+"歲"+"在"+school+"上"+grade);
}
}
var lisi = {
name: "李四",
gender: "女",
age: "18"
}
zhangsan.say.bind(lisi,"實驗小學","六年級")();
//zhangsan.say.bind(lisi)("實驗小學","六年級");
bind返回的是一個函數,後面仍需要一個()來調用