Hi, The point was to extend the original object with reference to the parent object (the original object as before the extension), and without creating a new class/object inherited from the original one.
I solved my problem with this: addPlugin: function(pluginObj) { var $parent = Object.clone(this); for (var p in pluginObj) { if (typeof(pluginObj[p])=='function') pluginObj[p] = eval(pluginObj[p].toString()); } Object.extend(this,pluginObj); } Notice the addPlugin method defines the $parent object, then it re- evaluates the methods in the extension object (pluginObj). Wouldn't it better if you could access the parent via a special object $parent.show() rather than making: this.show.bind(this)(); Where can I find the support forum? -thanks, Eli On Mar 30, 4:52 pm, "Ryan Gahl" <[EMAIL PROTECTED]> wrote: > However, you could employ a slightly more traditional approach, which is to > leave the first version of A as the base class, and then subclass it as > needed: > > (Btw, the way you have written A below is as a static object, and as such > you are gaining nothing by using Class.create(). Class.create() points the > constructor for the class at an "initialize" method on the class's > prototype, which of course you never define) > > Try something like this (notice that I define public class level instance > methods within the constructor to ensure they are truly only given to > instances of the class): > > var A = Class.create(); > A.prototype = { > initialize: function() { > //public instance members > this.show = function() { > alert("I am A"); > > }; > } > } > > var B = Class.create(); > Object.inherit(A, B); > Object.extend(B.prototype, { > initialize: function() { > //base class construction > this.base(); > > //override show > var oldShow = this.show.bind(this); > this.show = function() { > oldShow(); > alert("I am EXTENDED A"); > > }; > } > }); > > var test = new B(); > B.show(); // alerts "I am A" and "I am EXTENDED A" > > This technique comes right from by blog post on the inheritance model. > > Now, if you're looking to tack (or override) methods on existing > instances... you don't need a special addPlugin() method like what you > started doing. You can just take advantage of plain old javascript... > > (Assume we are back to using the definition of A from your original post)... > > var oldShow = A.show.bind(A); > A.show = function() { > oldShow(); > alert("I am EXTENDED A"); > > }; > > Notice in my first example (the object oriented approach), and in this > example (the static object version) I use a .bind() call. Doing so ensures > that if A.show() ever tried to access "this", it would still point to the > correct scope. > > For instance, imagine A.show() looked like this: > > function() { > alert(this.name); > > } > > Ok... so I'll stop now I guess, just realize this list isn't really supposed > to be a support list. :-) > > Hope this has helped though. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Prototype: Core" group. To post to this group, send email to prototype-core@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/prototype-core?hl=en -~----------~----~----~----~------~----~------~--~---