JS apply、call、bind区别

obj.call(thisObj, arg1,arg2...)
obj.apply(thisObj, [arg1,arg2,arg3...])
obj.bind(thisObj, arg1,arg2...)

  • call 和 apply 都可以用于改变 this 指向,即将obj绑定到thisObj上,这时 thisObj 就具有了 obj 的属性和方法。
  • 他们的区别在于第二个参数,call 接受的是连续参数,apply 接受的是 数组参数;
function add(j, k){
    return j+k;
}

function sub(j, k){
    return j-k;
}

在控制台运行:

add(5,3); //8
add.call(sub, 5, 3); //8
add.apply(sub, [5, 3]); //8

sub(5, 3); //2
sub.call(add, 5, 3); //2
sub.apply(add, [5, 3]); //2
  • this 绑定后会立即执行
    bind 与 call、apply 的区别
  • bind 与 call 相同,接受的也是连续参数
  • bind 绑定后不会立即执行
  • bind 的第一个参数如果是 null 或者 undefined ,则会绑定到全局对象

同样是add()和sub():

add.bind(sub, 5, 3); //不再返回8
add.bind(sub, 5, 3)(); //8

使用call调用原生方法

var a = {0:1, 1:"zohar", length: 2}; 
a.slice(); //TypeError: a.slice is not a function
Array.prototype.slice.call(a);//[1, "zohar"]

使用call实现继承

var parent = function () {
  this.url= 'zohar.com.cn',
  this.name= 'zohar'
}
var child = {}
console.log(child); // {}
parent.call(child);
console.log(child); // {url: "zohar.com.cn", name: "zohar"}

原作者:飞鸿影~
出处:http://52fhy.cnblogs.com/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容