浅谈JS中的bind方法与函数柯里化
绑定函数bind()最简单的用法是创建一个函数,使这个函数不论怎么调用都有同样的this值。不同于call和apply只是单纯地设置this的值后传参,它还会将所有传入bind()方法中的实参(第一个参数之后的参数)与this一起绑定。
关于这个特性看《JS权威指南》原文的例子:
varsum=function(x,y){returnx+y}; varsucc=sum.bind(null,1);//让this指向null,其后的实参也会作为实参传入被绑定的函数sum succ(2);//=>3:可以看到1绑定到了sum函数中的x
其次,bind()方法所返回的函数的length(形参数量)等于原函数的形参数量减去传入bind()方法中的实参数量(第一个参数以后的所有参数),因为传入bind中的实参都会绑定到原函数的形参,举个例子:
functionfunc(a,b,c,d){...}//func的length为4 varafter=func.bind(null,1,2);//这里输入了两个实参(1,2)绑定到了func函数的a,b console.log(after.length);//after的length为2
第三,当bind()所返回的函数用作构造函数的时候,传入bind()的this将被忽略,实参会全部传入原函数,这样说很抽象,举个例子:
functionoriginal(x){ this.a=1; this.b=function(){returnthis.a+x} } varobj={ a=10 } varnewObj=new(original.bind(obj,2));//传入了一个实参2 console.log(newObj.a);//输出1,说明返回的函数用作构造函数时obj(this的值)被忽略了 console.log(newObj.b());//输出3,说明传入的实参2传入了原函数original
以上就是ES5中bind方法的特性,这种技术也被称为函数柯里化。这种技术将多个参数的函数变成只带一个参数的函数。bind方法就是该技术在js中的实践。
关于这篇浅谈JS中的bind方法与函数柯里化就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。