Added in jQuery.proxy(obj, name), like the method described in Secrets of the JavaScr...
[jquery.git] / src / core.js
index 2c5445a..3b6cfff 100644 (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;