Function - Prototype JavaScript 框架

Xunxin Prototype API

Function

Prototype 对于函数的绑定(binding)提出了一些看法。

什么是绑定?

“绑定”最基本的用途是保证函数运行时,this 关键字会指向正确的对象。 虽然通常会有一个恰当的默认绑定(默认情形下 this 指向该方法所属的对象),但有时 this 会丢失它所应指向的对象,例如将函数引用作为参数传递时。

如果你不清楚 JavaScript 中 this 关键字的含义,请跳到 bind() 方法的文档,这篇文档中的样例将这个关键字的含义阐释得非常清楚。

Prototype 的补救措施!

Prototype 解决了 this 的指向问题。在 Prototype 中,对于任意一个函数,均能够找到两个新的方法: 一个用来确保正确的绑定(它甚至可以提前将参数进行绑定!),另一个专用于事件处理函数的绑定。

方法

译注:因 Prototype 新增的 Function 的方法有许多是将当前函数对象封装为另一个函数, 为便于说明,本文中的 原始函数 特指当前的函数对象,如 String.prototype.charAt.curry(0)原始函数charAt

argumentNames
1.6

someFunction.argumentNames() -> Array

获取函数定义的形参名称列表,并作为一个字符串数组返回。如果函数未定义参数,则返回一个空数组。

bind

bind(thisObj[, arg...]) -> Function

用另一个函数来封装原始的函数对象,将函数运行时的作用域限定为 thisObj 所指定的对象。
译注:该方法返回一个新的函数对象,返回的函数是原函数将其 this 关键字指向 thisObj 后的版本,并且,如果指定了可选的 arg 参数,还会将原函数中的部分或全部参数固定为 args 指定的值。该方法不会修改原函数对象。

bindAsEventListener

bindAsEventListener(thisObj[, arg...]) -> Function

一个专用于事件的 bind 方法的变体, 它确保事件触发后会将当前事件对象作为第一个参数传递给事件处理函数。

curry
1.6.0

curry(arg...) -> Function 

返回一个新的函数,该函数是原始函数对象用 arg 指定的值填充了部分参数的版本。

defer
1.6.0

defer(arg...) -> Number

当 JavaScript 解释器空闲后,再运行函数。

delay
1.6.0

delay(seconds[, arg...]) -> Number

延迟参数 seconds 指定的时间段再执行函数,arg 是调用这个函数所需的参数。

methodize

someFunction.methodize() -> Function

封装原始函数,返回一个新的函数,调用新函数时,实质是将原始函数的第一个参数设置为当前 this 所指向的对象,然后调用原始函数。

wrap
1.6.0

wrap(wrapperFunction[, arg...]) -> Function

将原始函数封装到参数 wrapperFunction 表示的函数中,返回一个新的函数。调用新函数时, 实质是将 wrapperFunction 函数的第一个参数设置为绑定了当前 this 对象的原始函数,然后再调用 wrapperFunction 函数。