js方法实现 --- bind

函数绑定

bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。

var slice = Array.prototype.slice;
Function.prototype.bind = function() {
    var thatFunc = this, thatArg = arguments[0];
    var args = slice.call(arguments, 1);
    if (typeof thatFunc !== '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');
    }
    return function(){
      var funcArgs = args.concat(slice.call(arguments))
      return thatFunc.apply(thatArg, funcArgs);
    };
  };
function _bind (fn, context) {
	return function() {
		return fn.apply(context,argument)
	}
}
function _bind(fn, context) {
	var args = Array.prototype.slice.call(argument, 2)
	return function () {
		let args2 =  Array.prototype.slice.call(arguments)
		fn.apply(context, args.contact(args))
	}
}

创建一个新函数 可以在特定的环境中以指定参数调用另一个函数

var handler = {
	name: 'shuang',
	handler: function () {
		console.log('i am ' + this.name)
	}
}
const unboundGetX = handler.handler;
console.log(unboundGetX()); 

貌似应该显式 ‘双’ 实质上显示undefined 这个就是this指向的问题了 this当前指向的执行环境是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值