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 - 分析與使用



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