call、apply、bind是function自带的方法作用是改变function中的this指向
call、apply、bind共同点:
(1)改变function的this对象的指向
(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