js自己实现 bind

简单实现 

Function.prototype.bind = function(ctx,...res){
	const self = this;
	return function (...res2){
		self.apply(ctx,res.concat(res2))
	}
}

const fn = function(num){
	console.log(this.name+''+num)
}
fn(1)
fn.bind({name:'luen'})(1)

 

官方实现,为了处理使用new来创建对象的情况


//官方实现
if (!Function.prototype.bind) {
    Function.prototype.bind = function (oThis) {
      if (typeof this !== "function") {
        // closest thing possible to the ECMAScript 5 internal IsCallable function
        throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
      }
 
      var aArgs = Array.prototype.slice.call(arguments, 1),
          fToBind = this,
          fNOP = function () {},
          fBound = function () {
            return fToBind.apply(this instanceof fNOP && oThis
                                   ? this
                                   : oThis || window,
                                 aArgs.concat(Array.prototype.slice.call(arguments)));
          };
 
      fNOP.prototype = this.prototype;
      fBound.prototype = new fNOP();
 
      return fBound;
    };
  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值