Adding Metadata To Methods

To support XObject.inherited we need to attach some information to each of our methods. We will do this by modifying XClass.merge to check each property it adds to the prototype. If the property is a function, it adds a _name property to the function. If the function overrides a base class method, it adds a _inherited property which is a reference to the overridden method. Here is the new merge funciton.

01: merge: function(target, properties, superclass) { 02: for ( var property in properties ) { 03: if ( !this.filterList.contains(property) ) { 04: var value = properties[property]; 05: target[property] = value;
06: if ( value && typeof(value) == "function" ) { 07: value._name = property;
08: var sc = superclass; 09: while ( sc ) { 10: scprop = sc.prototype[property];
11: if ( scprop && typeof(scprop) == "function" ) { 12: value._inherited = scprop; 13: break; 14: }
15: else { 16: sc = sc.prototype.superclass; 17: } 18: } 19: } 20: } 21: } 22: }

Next we will see how the inherited method is used.