Began moving abstract logic out of propCopy
parent
96d2f74dae
commit
5a3b401647
19
lib/class.js
19
lib/class.js
|
@ -217,6 +217,15 @@ var extend = ( function( extending )
|
|||
members = member_builder.initMembers( prototype ),
|
||||
abstract_methods = ( base.abstractMethods || [] ).slice();
|
||||
|
||||
// it's much faster to lookup a hash than it is to iterate through an
|
||||
// entire array each time we need to find an existing abstract method
|
||||
var abstract_map = {};
|
||||
for ( var i = 0, len = abstract_methods.length; i < len; i++ )
|
||||
{
|
||||
var method = abstract_methods[ i ];
|
||||
abstract_map[ method ] = i;
|
||||
}
|
||||
|
||||
util.propCopy( props, prototype, {
|
||||
each: function( name, value )
|
||||
{
|
||||
|
@ -239,12 +248,18 @@ var extend = ( function( extending )
|
|||
{
|
||||
var pre = prototype[ name ];
|
||||
|
||||
this.performDefault( name, func, is_abstract );
|
||||
|
||||
if ( ( pre === undefined ) && is_abstract )
|
||||
{
|
||||
abstract_methods.push( name );
|
||||
}
|
||||
|
||||
this.performDefault( name, func, is_abstract );
|
||||
else if ( pre && ( is_abstract === false ) )
|
||||
{
|
||||
// if this was a concrete method, then it should no longer
|
||||
// be marked as abstract
|
||||
delete abstract_methods[ abstract_map[ name ] ];
|
||||
}
|
||||
},
|
||||
|
||||
methodOverride: function( name, pre, func )
|
||||
|
|
|
@ -449,13 +449,6 @@ exports.overrideMethod = function(
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
// if this was a concrete method, then it should no longer be marked as
|
||||
// abstract
|
||||
if ( is_abstract === false )
|
||||
{
|
||||
delete abstract_methods[ abstract_map[ name ] ];
|
||||
}
|
||||
}
|
||||
|
||||
// this is the method that will be invoked when the requested
|
||||
|
|
Loading…
Reference in New Issue