JS手写代码篇---bind手写
12、手写bind方法
bind
是 Function 对象的一个方法,它主要用于创建一个新的函数,并绑定该函数的 this
值以及预设的参数。bind
方法允许你在调用函数时,指定函数的 this
值,并可以预先填充部分参数。
与call、apply的共性:改变this指向
但是bind与她们不相同的就是返回一个函数,在函数当中执行this指向的函数,这里会面临一个问题:this是否还会指向原来的函数???
答案是不会,所以我们要事先接收this指向的函数.
代码:
// 1、创建bind函数,传入obj和参数Function.prototype.myBind= function(obj , ...bindAgrs){// 2.判断thisif(typeof this !== 'function'){throw TypeError("this is not a function")}// 3.保存函数引用:后面会使用到的const self = this;// 4.返回的是function,function也是会传入参数的return function(...callArgs){// 5.执行这个函数(self),我们也是新建一个属性const key = Symbol('temp');// 注意!!!判断是否为空obj = obj ==null ? globalThis : Object(obj);// obj[key] = this;// 这里的 this 在返回的新函数中,指向调用新函数的对象(比如 window),而不是原始要绑定的函数。obj[key] = self;// 执行可能返回数据const res = obj[key](...bindAgrs , ...callArgs);delete obj[key];return res;}}
注意:
在返回的函数里面也是要接收参数的