這個對象就是對function的一些擴充,最重要的當屬bind方法,prototype的幫助文檔上特意說了一句話:Prototype takes issue with only one aspect of functions: binding.其中wrap方法也很重要,在類繼承機制里面就是利用wrap方法來調用父類的同名方法。
argumentNames 
bind 
bindAsEventListener 
curry 
defer 
delay 
methodize 
wrap 
 代碼如下:
//通過Object對象的extend方法對Function的prototype進行擴展 
Object.extend(Function.prototype, (function() { 
var slice = Array.prototype.slice; 
//把args添加到array后面,并返回array,內部方法 
function update(array, args) { 
var arrayLength = array.length, length = args.length; 
while (length--) array[arrayLength + length] = args[length]; 
return array; 
} 
//基本和update方法一樣,但是不改變傳入參數array,返回一個新的array 
function merge(array, args) { 
array = slice.call(array, 0); 
return update(array, args); 
} 
//把函數的參數格式化成數組,并返回 
function argumentNames() { 
var names = this.toString().match(/^[/s/(]*function[^(]*/(([^)]*)/)/)[1] 
.replace(/////.*?[/r/n]|///*(?:.|[/r/n])*?/*///g, '') 
.replace(//s+/g, '').split(','); 
return names.length == 1 && !names[0] ? [] : names; 
} 
//把執行函數的上下文綁定到context 
function bind(context) { 
if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; 
var __method = this, args = slice.call(arguments, 1); 
return function() { 
var a = merge(args, arguments); 
return __method.apply(context, a); 
} 
} 
//基本和bind差不多,就是保證傳入的第一個參數一定是event對象 
function bindAsEventListener(context) { 
var __method = this, args = slice.call(arguments, 1); 
return function(event) { 
var a = update([event || window.event], args); 
return __method.apply(context, a); 
} 
} 
//curry是一個數學家的名字,這個方法的作用就是可以連續的傳入參數,看下面的具體例子就知道了 
function curry() { 
if (!arguments.length) return this; 
var __method = this, args = slice.call(arguments, 0); 
return function() { 
var a = merge(args, arguments); 
return __method.apply(this, a); 
} 
} 
//window.setTimeout函數的簡單封裝 
function delay(timeout) { 
var __method = this, args = slice.call(arguments, 1); 
timeout = timeout * 1000 
return window.setTimeout(function() { 
return __method.apply(__method, args); 
}, timeout); 
} 
//相當于delay(0.01) 
function defer() { 
var args = update([0.01], arguments); 
return this.delay.apply(this, args); 
} 
//用wrapper包裝將要調用的函數,實現了簡單的AOP功能 
function wrap(wrapper) { 
var __method = this; 
return function() { 
var a = update([__method.bind(this)], arguments); 
return wrapper.apply(this, a); 
} 
} 
//把當前上下文作為第一個參數顯示的傳入調用的方法