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 - 分析與使用
------君臨天下,舍我其誰------