JS 中的 bind、call 与 apply
写在前面
十一出去遛了一圈,和女朋友一起耍了几天,期间基本没有学习,看了一点闲书,有过一点思考,但没有学习代码相关的知识。
今天刚刚回到北京,想到身无长物的我还要结婚买房,只能埋头继续苦干。
何为苦干?继续学习是也。
JS 中的函数也是对象
因为这样,再加上 JS 独有的原型链特色以及无处不在的 this,所以 JS 中的函数有几个通用的强大方法:bind、call、apply。
函数的参数
JS 中函数有两个隐形参数:this 和 arguments。
其中 this 如果不特别指定,有自己的默认值;arguments 就是参数列表。
bind 和 call 和 apply 的本质就是对已有函数的「参数列表」提前进行部分赋值。
bind
bind 是通过部分赋值产生一个「新函数」,产生的新函数基于原来的旧函数,且在大部分情况下是改变了 this,在另外一部分情况下是制造「偏函数」的效果。
Python 中 functools.partial(func, par=the_par) 也是产生「偏函数」。
动态语言一大好处就是运行时修改,JS 中的这三个函数通用方法和 Python 中的函数装饰器有着异曲同工的效果。
call 和 apply
call 和 apply 是在调用函数的时候,提前进行一些预处理,方式与 bind 类似,但即时运行,并不产生新函数。
call 的方式与 bind 完全一样。
apply 与 call 有一点不同:参数列表使用「列表」的形式。
不知是该恭喜,还是该怎样,总之阅读到该文的,你是第 人。每一次刷新,都是不同的自己。