Function - 对Function类的扩展

Prototype对Function对象的扩展比较简单, 但却是非常重要且非常有用的扩展。扩展主要包括2个方法, 他们被加到了Function.prototype中, 这样就使得任意的函数对象都具备了这两个方法。 这两个方法的主要用途在于将某个函数绑定到特定的函数之上去执行。

Knowledge Prepare - 知识准备

Source View - 源码解析

Function.prototype.bind = function() {
var __method = this;  // 这里的this表示bind方法的调用者, 是一个函数对象
var args = $A(arguments);  // 这里的$A(arguments)表示传入到bind方法的参数, 不要与下面的$A(arguments)混淆
var object = args.shift(); // 调用args.shift()方法返回第一个参数, 即目标对象; 此时args为除去第一个参数的一个参数数组
return function() {  // 不带有任何的参数的函数, 注意函数内部的$A(arguments)的含义
// 调用函数的apply方法执行函数, 其中的object为目标对象, args为bind方法中的参数列表(除了第一个参数以外的参数构成的数组)
return __method.apply(object, args.concat($A(arguments)));// 事实上, 这里的$A(arguments)一定是一个空数组
}
}
Function.prototype.bindAsEventListener = function(object) {
var __method = this;  // 这里的this表示bind方法的调用者, 是一个函数对象
return function(event) {  // 带有一个全局event参数的函数
// 调用函数的call方法执行函数, 其中的object为目标对象, 全局的event对象作为参数
return __method.call(object, event || window.event);
}
}

Field & Function Reference - 属性方法一览

Function ( 实例 ) - 扩展
Method / Property Kind Arguments Description
bind(object[, arg1, arg2...]) 方法 object:目标对象, 函数将绑定到该对象上去执行
argument list: 以参数列表的方式传入, 函数执行时所带的参数
一个实例方法, 其调用者是一个函数对象, 表示将某个对象绑定到该函数上去执行, 其中的第一个参数表示目标对象, 其他参数将作为函数执行时的参数传入
bindAsEventListener(object) 方法 object:目标对象 一个实例方法, 其调用者是一个函数对象, 表示将某个对象绑定到该函数上去执行, 参数为目标对象, 在函数执行时将全局的Event对象作为参数传入

Analysis & Usage - 分析与使用



------君临天下,舍我其谁------