call、apply、bind异同点及原理

2017-07-20  本文已影响97人  sdcV
1. 相同点:动态地改变传入函数的this。
2. 不同点
  1. call和apply传入的参数形式有区别,如:
    var func = function(a, b, c){
    console.log([a, b, c]);
    }
    func.apply(null, [1,2,3]); //[1, 2, 3]
    func.call(null,1,2,3); //[1,2,3]
    原理:当调用一个函数时,JavaScript的解释器并不会计较形参和实参的数量、类型以及顺序,JavaScript的参数内部就是用一个数组表示的。
  1. bind和call、apply的区别在于bind返回的是<b>待执行的函数。</b>
    模拟一个bind的实现
    Function.prototype.bind = function(context){
    var self = this;
    return function(){
    return self.apply(context, arguments);
    }
    };

    var obj = {name: 'sdc'};
    var func = function(){
        console.log(this.name);
    }.bind(obj);
    func(); // sdc
    
3. 用途:
上一篇下一篇

猜你喜欢

热点阅读