Function
Prototype 对于函数的绑定(binding)提出了一些看法。
什么是绑定?
“绑定”最基本的用途是保证函数运行时,this
关键字会指向正确的对象。
虽然通常会有一个恰当的默认绑定(默认情形下 this
指向该方法所属的对象),但有时
this
会丢失它所应指向的对象,例如将函数引用作为参数传递时。
如果你不清楚 JavaScript 中 this
关键字的含义,请跳到 bind()
方法的文档,这篇文档中的样例将这个关键字的含义阐释得非常清楚。
Prototype 的补救措施!
Prototype 解决了 this
的指向问题。在 Prototype 中,对于任意一个函数,均能够找到两个新的方法:
一个用来确保正确的绑定(它甚至可以提前将参数进行绑定!),另一个专用于事件处理函数的绑定。
方法
译注:因 Prototype 新增的 Function
的方法有许多是将当前函数对象封装为另一个函数,
为便于说明,本文中的 原始函数 特指当前的函数对象,如 String.prototype.charAt.curry(0)
,
原始函数 指 charAt
。
argumentNames1.6
someFunction.argumentNames() -> Array
获取函数定义的形参名称列表,并作为一个字符串数组返回。如果函数未定义参数,则返回一个空数组。
bind
bind(thisObj[, arg...]) -> Function
用另一个函数来封装原始的函数对象,将函数运行时的作用域限定为 thisObj
所指定的对象。
译注:该方法返回一个新的函数对象,返回的函数是原函数将其 this
关键字指向 thisObj
后的版本,并且,如果指定了可选的 arg
参数,还会将原函数中的部分或全部参数固定为 args
指定的值。该方法不会修改原函数对象。
bindAsEventListener
bindAsEventListener(thisObj[, arg...]) -> Function
一个专用于事件的 bind 方法的变体, 它确保事件触发后会将当前事件对象作为第一个参数传递给事件处理函数。
curry1.6.0
curry(arg...) -> Function
返回一个新的函数,该函数是原始函数对象用 arg
指定的值填充了部分参数的版本。
defer1.6.0
defer(arg...) -> Number
当 JavaScript 解释器空闲后,再运行函数。
delay1.6.0
delay(seconds[, arg...]) -> Number
延迟参数 seconds
指定的时间段再执行函数,arg
是调用这个函数所需的参数。
methodize
someFunction.methodize() -> Function
封装原始函数,返回一个新的函数,调用新函数时,实质是将原始函数的第一个参数设置为当前 this
所指向的对象,然后调用原始函数。
wrap1.6.0
wrap(wrapperFunction[, arg...]) -> Function
将原始函数封装到参数 wrapperFunction
表示的函数中,返回一个新的函数。调用新函数时,
实质是将 wrapperFunction
函数的第一个参数设置为绑定了当前 this
对象的原始函数,然后再调用 wrapperFunction
函数。