美文网首页
JS apply、call、bind区别

JS apply、call、bind区别

作者: 落沙w | 来源:发表于2017-09-07 11:23 被阅读0次

    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/

    相关文章

      网友评论

          本文标题:JS apply、call、bind区别

          本文链接:https://www.haomeiwen.com/subject/oszbjxtx.html