JavaScript中call apply bind的區別

相同點:都可以改變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返回的是一個函數,後面仍需要一個()來調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章