js实现bind方法

2019-05-13  本文已影响0人  Victor_818

方法一:

支持传参
Function.prototype.my_bind = function() {
      var self = this, // 保存原函数
        context = Array.prototype.shift.call(arguments), // 保存需要绑定的this上下文
        // 上一行等价于 context = [].shift.call(arguments);
        args = Array.prototype.slice.call(arguments); // 剩余的参数转为数组
      return function() { // 返回一个新函数
        self.apply(context, Array.prototype.concat.call(args, Array.prototype.slice.call(arguments)));
      }
    }
function a(m, n, o) {
    console.log(this.name + ' ' + m + ' ' + n + ' ' + o);
  }

  var b = {
    name: 'kong'
  };

  a.my_bind(b, 7, 8, 9)();   // kong 7 8 9

方法二:

// 不支持传参
Function.prototype.my_bind = function(target){
    return ()=>{
        console.log(target)
        this.call(target);
    }
}
function a(m, n, o) {
    console.log(this.name + ' ' + m + ' ' + n + ' ' + o);
  }

  var b = {
    name: 'kong'
  };

  a.my_bind(b, 7, 8, 9)();   // kong  undefined undefined undefined
上一篇下一篇

猜你喜欢

热点阅读