当前位置: 首页 > Web前端 > JavaScript

Javascript的bind方法的使用与实现

时间:2023-03-27 12:33:42 JavaScript

Javascript的bind方法的使用与实现在面试中,我们经常会遇到手写bind、apply、call方法的笔试题。今天我们就来看看bind方法是什么,并实现bind方法,免得面试时答不上来。首先了解bind方法是什么,实现了哪些功能。看MDN上的介绍Function.prototype.bind()bind()方法创建一个新的函数。调用bind()时,这个新函数的this被指定为bind()的第一个参数,其余参数将作为调用时新函数的参数。示例:varhello=function(a,b,c,d){console.log(this.temp);console.log(a,b,c,d)};vardemo={name:'demo'};varh=hello.bind(演示,1,2);h(3,4);//out'demo''1234'可见bind方法在原函数内部实现了这一点的改变,返回了一个新的函数出来了。所以后面一定要有一个括号,就是执行后会得到相应的结果。bind中第一个括号中的第一个参数被视为函数的this,其余参数,包括后面执行函数时传入的参数,依次被原函数使用(curried)。了解了上面的核心之后,我们就可以构造自己的bind函数了。首先,bind返回一个函数,所以第一步好说:Function.prototype.myBind=function(){returnfunction(){}}其次,bind需要把第一个参数放在bind之后的第一个括号里作为原函数的this获取函数的入参,我们需要稍微了解arguments,这里举例:vartest=function(a,b,c,d){console.log(arguments)console.log(a,b,c,d)};test(1,2,3)//Arguments(3)[1,2,3,callee:?,Symbol(Symbol.iterator):?]//123undefined表示argumentsput传入数组的参数被组织成一个类似数组的对象。我们可以在不冗余定义形参的情况下获取参数,非常方便。通过arguments.length我们可以知道传入的参数个数,接下来使用arguments继续改造:Function.prototype.myBind=function(){//保存bind传入的第一个参数constparams_first=arguments[0]//传入2nd,3,4...等参数保存constarg=[]for(leti=1;i