// Bind a function to a context, optionally partially applying any
// arguments.
proxy: function( fn, context ) {
- var args, proxy;
-
- // XXX BACKCOMPAT: Support old string method.
if ( typeof context === "string" ) {
- fn = fn[ context ];
- context = arguments[0];
+ var tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
}
// Quick check to determine if target is callable, in the spec
// this throws a TypeError, but we will just return undefined.
- if ( ! jQuery.isFunction( fn ) ) {
+ if ( !jQuery.isFunction( fn ) ) {
return undefined;
}
- if ( jQuery.support.nativeBind ) {
- // Native bind
- args = slice.call( arguments, 1 );
- if ( args.length ) {
- proxy = Function.prototype.bind.apply( fn, args );
- } else {
- proxy = fn.bind( context );
- }
- } else {
- // Simulated bind
- args = slice.call( arguments, 2 );
- if ( args.length ) {
- proxy = function() {
- return arguments.length ?
- fn.apply( context, args.concat( slice.call( arguments ) ) ) :
- fn.apply( context, args );
- };
- } else {
- proxy = function() {
- return arguments.length ?
- fn.apply( context, arguments ) :
- fn.call( context );
- };
- }
- }
+ // Simulated bind
+ var args = slice.call( arguments, 2 ),
+ proxy = function() {
+ return fn.apply( context, args.concat( slice.call( 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++;
// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
getSetAttribute: div.className !== "t",
- // Test for presence of native Function#bind.
- // Not in: >= Chrome 6, >= FireFox 3, Safari 5?, IE 9?, Opera 11?
- nativeBind: jQuery.isFunction( Function.prototype.bind ),
-
// Will be defined later
submitBubbles: true,
changeBubbles: true,
});
test("jQuery.proxy", function(){
- expect(6);
+ expect(7);
var test = function(){ equals( this, thisObject, "Make sure that scope is set properly." ); };
var thisObject = { foo: "bar", method: test };
// Basic scoping
jQuery.proxy( test, thisObject )();
+ // Another take on it
+ jQuery.proxy( thisObject, "method" )();
+
// Make sure it doesn't freak out
equals( jQuery.proxy( null, thisObject ), undefined, "Make sure no function was returned." );