bind方法的简单js实现

本文深入解析了JavaScript中的bind方法,详细介绍了如何使用bind方法来改变函数调用时的this指向,以及如何预设函数参数。同时,通过一个自定义bind方法的实现案例,帮助读者更好地理解bind的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/** 
 * The bind() method creates a new function that, when called, 
 * has its this keyword set to the provided value, 
 * with a given sequence of arguments preceding any provided when the new function is called.
 * 
 * bind方法会新建一个函数,这个函数被调用的时候其中的this值会被设置为提供的值,在调用新函数时,在任何提供的参数之前具有给定的参数序列。
 * function.bind(thisArg[,arg1[,arg2[, ...]]])
   1)thisArg
     调用绑定函数时作为this参数传递给目标函数的值。 如果使用new运算符构造绑定函数,则忽略该值。
	 当使用bind在setTimeout中创建一个函数(作为回调提供)时,作为thisArg传递的任何原始值都将转换为object。
	 如果bind函数的参数列表为空,执行作用域的this将被视为新函数的thisArg。
   2)arg1, arg2, ...
     当目标函数被调用时,预先添加到绑定函数的参数列表中的参数。
   3)返回值
      返回一个原函数的拷贝,并拥有指定的this值和初始参数。
 */
function mybind(f, obj) {
	//将方法变成一行显示
	var fStr = f.toString().replace(/\n/g, "");
	//方法参数
	var argsStr = fStr.slice(fStr.indexOf("(") + 1, fStr.indexOf(")"));
	//方法体
	var funBody = fStr.slice(fStr.indexOf("{") + 1, fStr.lastIndexOf("}"));
	//形成新的方法
	var newF = new Function(argsStr, funBody);
	//通过闭包进行返回
	return function() {
		return newF.apply(obj, arguments);
	}
}
//测试
function b(a, b) {
	var c = a + b;
	c = 111;
	return c;
}
var fff = mybind(b, {
	dd: 333
});
fff();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值