首先,官方的文档说明在这里
语法
|
|
用法和注意点
1. 通过bind
改变函数中的this
指向,这是最常见的用法
|
|
2. 偏函数,使一个函数拥有预设的初始参数
|
|
3. 和new
操作符结合使用
|
|
当bind
出来的函数使用new
操作符调用时,就像把原函数当成构造器。提供的 this 值被忽略,同时调用时的参数被提供给模拟函数
开始写polyfills
首先写一个架子:
|
|
这里是在Function.proptotype
原型链上增加了一个bind
方法,先保证了this
的类型必须是函数类型。
第一步,满足功能1: 通过bind
改变函数中的this
指向
|
|
这时候,功能1就满足了,但是功能2是不能满足的,因为我们在bind
方法中,仅仅接收了处理了第一个参数,而其他的参数都被抛弃了。
第二步,为了满足偏函数的功能,我们需要在bind
内部,将除了第一个参数之外的其他参数,合并到最后返回的fBound
函数中。
代码如下:
|
|
第三步,处理new
操作符调用的情况:
在判断到使用new
操作符调用时,我们直接忽略bind
提供的this,而使用函数本身的this即可。
|
|
如果支持ES6的话,我们在函数内部可以直接通过判断new.target
是否存在就能知道是否为new
调用,代码会简化很多:
|
|
这时候,我们写的polyfill已经基本满足所有需求了。