/**
* 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();
bind方法的简单js实现
最新推荐文章于 2021-04-22 22:06:37 发布