call、apply、bind的区别

call、apply、bindfunction自带的方法作用是改变function中的this指向
 
call、apply、bind共同点:
(1)改变functionthis对象的指向
(2)第一个参数都是this要指向的对象
(3)后续参数继续传参
 
各自特点:
call:接受连续参数
apply:接受数组参数
bind:不会立即执行,再次调用才执行
apply、call作用完全一样只是接受参数方式不太一样
举个例子:
var a = {
    name : "Tom",
    sex : true,
    age : 18,
    qqq : function(school,grade) {
        console.log(
            "名称:"+this.name + " ;" +
            "性别:"+this.sex + " ;" +
            "年龄:"+this.age + " ;" +
            "学校:"+school + " ;" +
            "年级:"+grade + " ;" 
        )
    }
}
var b = {
    name : "Anny",
    sex : false,
    age : 17
}

// b "继承" a 的属性和方法。绑定后会立即执行函数

a.qqq.call(b,"实验小学","一年级"); // 接受连续参数

a.qqq.apply(b,["实验小学","一年级"]); // 接受数组参数

var c = a.qqq.bind(b); // 不会立即执行
c("实验小学","一年级") // 再次调用就开始执行

a.qqq.bind(b)("实验小学","一年级") // 这样子写也行(反正也是调用)

过程解释:

 

最后推荐一些我学习call、apply、bind时收藏的一些写的不错的文章:
https://www.cnblogs.com/pssp/p/5215621.html#

https://www.cnblogs.com/libin-1/p/6069031.html

 

posted @ 2019-07-04 17:48  前端-大雄  阅读(293)  评论(0编辑  收藏  举报