手写一个简易的bind函数

 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);

 

posted @ 2021-10-05 11:13  一个动态类型的幽灵  阅读(109)  评论(0编辑  收藏  举报