underscore.js 源码分析(十)
使用underscore.js 的 function 部分bind
bindall
partial
memorize
delay
bind
_.bind(func, obj, *arguments)
使用 bind
使用 bind
的目的是将函数 func
绑定到 obj
上面去,也就是说,这时候 func
中的 this
就指向了 obj
, 其中 arguments
被作为传递给 func
的参数被传入到 func
之中。实例如下
1 | function greet(home) { |
关于使用
bind
的函数:使用 bind
的函数使用 bind
函数接收两个参数,第一个参数表示需要进行绑定的变量,第二个参数表示传递给函数的参数。源码如下:
1 | _.bind = function(func, context) { |
executeBound
函数如下:1 | // 这里面 boundFunc 是需要进行绑定的函数 |
baseCreate
函数如下:1 | let Ctor = function () {}; |
nativeCreate
返回的是这个 Object.create()
使用 Object.create
用来实现继承的关系1 | // 使用 new 操作符的过程 |
partial
partial(function, *arguments)
局部应用一个函数填充在任意个数的 arguments
。实例
1 | function add(a, b) { |
1 | function partial(fn) { |
源码分析
1 | _.partial = function(func) { |
executeBound
函数上面有解释,这个函数的作用是:Determines whether to execute a function as a constructor, or a normal function with the provided arguments决定是否构建一个函数作为构造函数,或者运行一个给定参数的普通函数。
memoize
使用 memorize
用来缓存函数计算的结果。delay
使用 delay
用来实现对于函数延迟执行,代码如下:1 | function delay(func, wait) { |
defer
defer(function, *arguments)
使用 defer
的目的在于延迟调用 function
直到当前的调用栈被清空为止,其中 arguments
会被作为 function
的参数进行传入。类似于使用 setTimeout(function () {}, 0)
的延迟调用效果。实现的源码如下:1 | _.defer = _.partial(_.delay, _, 1); |