emptyFunction
emptyFunction([argument...])
emptyFunction 不做任何事,也不返回任何值!
为减少依赖,它被框架用来作为一个备用函数。典型的应用是将它作为一个可选的回调函数参数的默认值。
isFunction [1.6]
isFunction(obj) -> Boolean
如果 obj 是一个 Function 对象,返回 true,否则返回 false。
样例
Object.isFunction($); //-> true
Object.isFunction(123); //-> false
wrap [1.6.0]
wrap(wrapperFunction[, arg...]) -> Function
将原始函数封装到参数 wrapperFunction 表示的函数中,返回一个新的函数。调用新函数时, 实质是将 wrapperFunction 函数的第一个参数设置为绑定了当前 this 对象的原始函数,然后再调用 wrapperFunction 函数。
Function#wrap 体现了 面向方面的程序设计 的本质,让你能够轻松的为已有的函数指定调用前和调用后的行为,改变返回的结果, 甚至还可以阻止对原始函数的调用。
样例
String.prototype.capitalize = String.prototype.capitalize.wrap(
function(proceed, eachWord) {
if (eachWord && this.include(&...
methodize
someFunction.methodize() -> Function
将原始函数方法化,返回一个新的函数,调用新函数时,实质是将原始函数的第一个参数设置为当前 this 所指向的对象,然后调用原始函数。
methodize 方法对原始函数进行转换,当调用时将原函数中第一个显式的参数设置为 this(当前上下文),成为一个隐含参数。它常用于转换一个函数作为对象或对象原型(prototype 属性)的方法,并简化函数的签名。
样例
// 从一个直接操作目标对象的简单函数开始:
var fn = function(target, foo) {
target.value = foo;
};
var object = {};
// 使用原始函数
fn(object, 'bar');
object.value
//-> 'bar'
// 将 fn 方法...
delay [1.6.0]
delay(seconds[, arg...]) -> Number
延迟参数 seconds 指定的时间段再执行函数,arg 是调用这个函数所需的参数。
该方法的行为非常类似于 window.setTimeout。 该方法返回一个 ID,可以在函数运行前使用 window.clearTimeout 取消函数的运行。
如果希望当 JavaScript 解释器空闲后马上运行函数,请使用 Function#defer 方法。
样例
// 以前:
window.setTimeout(function() {
Element.addClassName('foo', 'bar');
}, 1000);
// 现在:
Element.addClassName.delay(1, 'foo', 'bar');
// 取消函数的延迟执行
var id = Element.hide.delay(5, 'foo');...
defer [1.6.0]
defer(arg...) -> Number
当 JavaScript 解释器空闲后,再运行函数。
译注:其实这个方法是调用 delay,并将 seconds 参数设为 0.01 秒。因为从本质上来说,JavaScript 是单线程的(据说 Google Chrome 的 V8 引擎是多线程的),在 delay 方法中,当代码执行到 window.setTimeout 一句时,程序只是记下当前的时间, 然后继续执行下面的语句,只有当下面的语句都执行完后,才检查此时的时间是否大于 setTimeout 指定的时间间隔,如果大于,则执行 setTimeout 中指定的函数。这就是“解释器空闲后,再运行函数”的由来。
一个“延迟执行”的函数不会立即运...
curry [1.6.0]
curry(arg...) -> Function
返回一个新的函数,该函数是原始函数对象用 arg 指定的值填充了部分参数的版本。
Function#curry 的行为类似于没有初始作用域参数的 Function#bind 方法。
样例
String.prototype.splitOnSpaces = String.prototype.split.curry(" ");
"foo bar baz thud".splitOnSpaces();
//-> ["foo", "bar", "baz", "thud"]
...
bindAsEventListener
bindAsEventListener(thisObj[, arg...]) -> Function
一个专用于事件的 bind 方法的变体, 它确保事件触发后会将当前事件对象作为第一个参数传递给事件处理函数。
如果你不清楚“绑定”是什么,请查阅 Function 概述。如果你不是非常明白 bind() 能够做什么,请查阅它的文档。
假如创建一个用于事件处理的函数,你需要以某种方式获取当前的事件对象,同时还要控制函数运行时所在的 上下文,该怎么办?bindAsEventListener 都为你考虑到了,它将事件处理函数绑定到指定的上下文 (thisObj),并且确保当事件发生时,事件对象会传递到事件处理函数。
对于仅实现了 DOM Level 0 事件...
bind
bind(thisObj[, arg...]) -> Function
用另一个函数来封装原始的函数对象,将函数运行时的作用域限定为 thisObj 所指定的对象。
译注:该方法返回一个新的函数对象,返回的函数是原函数将其 this 关键字指向 thisObj 后的版本,并且,如果指定了可选的 arg 参数,还会将原函数中的部分或全部参数固定为 args 指定的值。该方法不会修改原函数对象。
关于绑定,在 Function 概述中已经作了论述。它对于新手来说,可能是一个难以捉摸的东西, 但事实上它是一个非常简单的概念。当然,这需要对 JavaScript 语言有一定的基础。
在 JavaScript 中,函数通常运行在一个特定的上下文中(通常称为“作用域[scope]”...
argumentNames 【1.6】
someFunction.argumentNames() -> Array
获取函数定义的形参名称列表,并作为一个字符串数组返回。如果函数未定义参数,则返回一个空数组。
样例
var fn = function(foo, bar) {
return foo + bar;
};
fn.argumentNames();
//-> ['foo', 'bar']
Prototype.emptyFunction.argumentNames();
//-> []
...
Prototype 对于函数的绑定(binding)提出了一些看法。
什么是绑定?
“绑定”最基本的用途是保证函数运行时,this 关键字会指向正确的对象。 虽然通常会有一个恰当的默认绑定(默认情形下 this 指向该方法所属的对象),但有时 this 会丢失它所应指向的对象,例如将函数引用作为参数传递时。
如果你不清楚 JavaScript 中 this 关键字的含义,请跳到 bind() 方法的文档,这篇文档中的样例将这个关键字的含义阐释得非常清楚。
Prototype 的补救措施!
Prototype 解决了 this 的指向问题。在 Prototype 中,对于任意一个函数,均能够找到两个新的方法: 一个用来确保正确的绑定(它甚至可以提前将参数进行绑定!),另一个专...
JavaScript中的Function对象是函数,函数的用途分为3类:
作为普通逻辑代码容器;
作为对象方法;
作为构造函数。
1.作为普通逻辑代码容器
function multiply(x, y){
return x*y;
}
函数multiply封装了两位数的乘法运算公式:
var product = multiply(128,128); // product = 16384
创建函数实例的方式有3种。第一种是声明式,即像声明变量一样,将通过function(){}标识符创建的匿名函数直接赋值给变量,以该变量作为调用时的函数名称:
var multiply = function(x, y){
return x*y;
}
第二种是定义式,即以function关键字后跟函数名称及(){}来直接定义命名函数,前面第一个multiply函数就是通过定义式创建的。...
大家都知道Javascript 有两个种定义Function的方法非常常用。例如
function a(){alert("a")}
var a = function(){alert("a")}
虽然两个种方式定义出来的 function 调用的时候结果一样,但是中间还是有区别的。举个简单的例子,假如我们要重定义 a() ,而且新的方法要继承 a() 里面所有方法并且进行其他扩展的话。就可以明显看到这两个方式的区别了。
1. 首先,我们先建立一个临时的变量来存储 a()
var b = a;
然后,重新定义a()
第一种方式:
function a(){
b();
&nbs...