Function - 對Function類的擴(kuò)展

Prototype對Function對象的擴(kuò)展比較簡單, 但卻是非常重要且非常有用的擴(kuò)展。擴(kuò)展主要包括2個方法, 他們被加到了Function.prototype中, 這樣就使得任意的函數(shù)對象都具備了這兩個方法。 這兩個方法的主要用途在于將某個函數(shù)綁定到特定的函數(shù)之上去執(zhí)行。

Knowledge Prepare - 知識準(zhǔn)備

Source View - 源碼解析

Function.prototype.bind = function() {
var __method = this;  // 這里的this表示bind方法的調(diào)用者, 是一個函數(shù)對象
var args = $A(arguments);  // 這里的$A(arguments)表示傳入到bind方法的參數(shù), 不要與下面的$A(arguments)混淆
var object = args.shift(); // 調(diào)用args.shift()方法返回第一個參數(shù), 即目標(biāo)對象; 此時args為除去第一個參數(shù)的一個參數(shù)數(shù)組
return function() {  // 不帶有任何的參數(shù)的函數(shù), 注意函數(shù)內(nèi)部的$A(arguments)的含義
// 調(diào)用函數(shù)的apply方法執(zhí)行函數(shù), 其中的object為目標(biāo)對象, args為bind方法中的參數(shù)列表(除了第一個參數(shù)以外的參數(shù)構(gòu)成的數(shù)組)
return __method.apply(object, args.concat($A(arguments)));// 事實(shí)上, 這里的$A(arguments)一定是一個空數(shù)組
}
}
Function.prototype.bindAsEventListener = function(object) {
var __method = this;  // 這里的this表示bind方法的調(diào)用者, 是一個函數(shù)對象
return function(event) {  // 帶有一個全局event參數(shù)的函數(shù)
// 調(diào)用函數(shù)的call方法執(zhí)行函數(shù), 其中的object為目標(biāo)對象, 全局的event對象作為參數(shù)
return __method.call(object, event || window.event);
}
}

Field & Function Reference - 屬性方法一覽

Function ( 實(shí)例 ) - 擴(kuò)展
Method / Property Kind Arguments Description
bind(object[, arg1, arg2...]) 方法 object:目標(biāo)對象, 函數(shù)將綁定到該對象上去執(zhí)行
argument list: 以參數(shù)列表的方式傳入, 函數(shù)執(zhí)行時所帶的參數(shù)
一個實(shí)例方法, 其調(diào)用者是一個函數(shù)對象, 表示將某個對象綁定到該函數(shù)上去執(zhí)行, 其中的第一個參數(shù)表示目標(biāo)對象, 其他參數(shù)將作為函數(shù)執(zhí)行時的參數(shù)傳入
bindAsEventListener(object) 方法 object:目標(biāo)對象 一個實(shí)例方法, 其調(diào)用者是一個函數(shù)對象, 表示將某個對象綁定到該函數(shù)上去執(zhí)行, 參數(shù)為目標(biāo)對象, 在函數(shù)執(zhí)行時將全局的Event對象作為參數(shù)傳入

Analysis & Usage - 分析與使用



------君臨天下,舍我其誰------