1
0
Fork 0

Overridden methods now property return instance when returning 'this'

- There may be a cleaner way to do this. This is a quick fix.
closure/master
Mike Gerwitz 2011-03-10 12:40:55 -05:00
parent 84363aca45
commit e0fb37daa0
2 changed files with 33 additions and 4 deletions

View File

@ -319,12 +319,22 @@ function overrideMethod( super_method, new_method, instCallback )
{ {
override = function() override = function()
{ {
var context = instCallback( this ) || this,
retval = undefined
;
// the _super property will contain the parent method // the _super property will contain the parent method
this.__super = super_method; this.__super = super_method;
var retval = new_method.apply( retval = new_method.apply( context, arguments );
( instCallback( this ) || this ), arguments
); // if the value returned from the method was the context that we
// passed in, return the actual instance (to ensure we do not break
// encapsulation)
if ( retval === context )
{
return this;
}
return retval; return retval;
}; };

View File

@ -67,13 +67,25 @@ var common = require( './common' ),
{ {
return this; return this;
}, },
'public getSelfOverride': function()
{
// override me
},
}), }),
// instance of Foo // instance of Foo
foo = Foo(), foo = Foo(),
// subtype // subtype
SubFoo = Foo.extend( {} ), SubFoo = Foo.extend({
'public getSelfOverride': function()
{
// return this from overridden method
return this;
},
}),
sub_foo = SubFoo() sub_foo = SubFoo()
; ;
@ -341,5 +353,12 @@ var common = require( './common' ),
sub_foo, sub_foo,
"Returning 'this' from a super method should return the subtype" "Returning 'this' from a super method should return the subtype"
); );
// finally, overridden methods should still return the instance
assert.deepEqual(
sub_foo.getSelfOverride(),
sub_foo,
"Returning 'this' from a overridden method should return the subtype"
);
} )(); } )();