手写bind
Function.prototype.bind1 = function(){
// 获取传入的参数,并转换成数组
let args = Array.prototype.slce.call(arguments);
// 获取数组的第一项为需要返回的指定this
let _this = args.shift();
// 获取调用者-原始this
let self = this;
// 返回一个新的方法
return function(){
return self.apply(_this, args);
}
}
注:1、Array.prototype.slce会返回一个新的数组;
2、call()和apply():
相同:都可以改变this的指向,在不传入需要指向的对象时,则指向Global对象;
传入时的第一个参数为this指向
不同:apply只能传递两个参数,第二个参数为数组;
call可以传递多个参数