Added in jQuery.proxy(obj, name), like the method described in Secrets of the JavaScript Ninja and in Dojo's Hitch, and added in some unit tests.

This commit is contained in:
jeresig 2009-12-31 15:17:52 -05:00
parent a5dbca4a06
commit 1d2b1a57da
2 changed files with 37 additions and 7 deletions

View file

@ -618,17 +618,28 @@ jQuery.extend({
guid: 1,
proxy: function( fn, proxy, thisObject ) {
if ( arguments.length === 2 && proxy && !jQuery.isFunction( proxy ) ) {
thisObject = proxy;
proxy = undefined;
if ( arguments.length === 2 ) {
if ( typeof proxy === "string" ) {
thisObject = fn;
fn = thisObject[ proxy ];
proxy = undefined;
} else if ( proxy && !jQuery.isFunction( proxy ) ) {
thisObject = proxy;
proxy = undefined;
}
}
proxy = proxy || function() {
return fn.apply( thisObject || this, arguments );
};
if ( !proxy && fn ) {
proxy = function() {
return fn.apply( thisObject || this, arguments );
};
}
// Set the guid of unique handler to the same of original handler, so it can be removed
proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
if ( fn ) {
proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
}
// So proxy can be declared as an argument
return proxy;