1 // bind方法 在构造函数的原型对象上 2 // 接受的是逗号隔开的参数形式 参数的个数不确定 3 Function.prototype.bind1 = function () { 4 // 将 逗号隔开的参数分割成数组 arguments 可以获取所有的参数 5 const args = Array.prototype.slice.call(arguments); 6 // 从数组中删除传入的this指向 并返回 剩下的都是传入的参数 shift 从头部删除 返回删除的元素 把this剔除出去 剩下的都是参数 所以要用shift删除 7 const _this = args.shift(); 8 // 谁调用bind1方法 this指向谁 当前函数的this指向 9 const self = this; 10 // 调用bind方法 的时候 返回一个函数 11 return function () { 12 // 函数内部通过apply 修改this指向并返回结果 (主要功能 是apply内部实现的) 13 return self.apply(_this, args); 14 }; 15 }; 16 // 定义一个fn1函数 17 function fn1(a, b, c) { 18 console.log("this", this); 19 console.log(a, b, c); 20 return "this is fn1"; 21 } 22 // fn1通过bind修改this指向 返回一个新函数 23 const fn2 = fn1.bind1({ x: 10 }, 10, 20, 30); 24 // 调用 这个新函数 25 const res = fn2(); 26 // 打印新函数的返回值 27 console.log(res);