js bind()实现

var bind1 = function(fn, obj) {
	var arr = Array.prototype.slice.call(arguments, 2);
	return function(){
		fn.apply(obj, arr.concat(Array.prototype.slice.call(arguments)))
	}
}

使用 Array.prototype.slice.call的方法获取所传值的第二个值后的所有值,也可以直接  [].slice.call  ,效果一样。

将第一次 Bind()时的一部分值存下来的后。return 一个函数(因为 bind 的作用是改变 this 的指向后,返回一个函数待用。)

在返回值里给将 fn 的this指向obj,并且把这次使用时传入的参数 concat 到之前的 arr 中。

 


let t = {
	a: 1
}
function kkk() {
	console.log(this.a)
	let arr = [];
	arr.push(...arguments);
	console.log(arr)
}
let st = bind1(kkk,t,1);
st(2,3)

测试~

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页