实现
bind 跟 apply 、call 实现不同的地方在于,它返回的是一个函数。
bind 语法:
- fun.bind(context, arg1, arg2, …)
- context:当绑定函数被调用时,该参数会作为原函数运行时的this指向;当使用new操作符调用绑定函数时,该参数无效。
- arg1,arg2…:绑定函数被调用时,这些参数将位于实参之前传递给绑定的方法。
Function.prototype.kaimoBind = function (context) { // 保存原函数 const self = this; // bind 函数中的参数 const args = [...arguments].slice(1); console.log(args); // 创建一个新函数 return function () { // 这里的 arguments 是外部函数传入的 console.log(arguments); return self.apply(context, args.concat(...arguments)); } } const kaimoObj = { name: 'kaimo' }; function kaimoTest() { console.log(this.name); } kaimoTest.kaimoBind(kaimoObj, [1,2])([3]);