I'm not sure I understand how these 2 are identical. Former one is a constructor function (with properties like "prototype", "subclasses", "superclass"), while latter one is a "prototype" object (with all the shared "instance" methods).
As far as mixins and inheritance, I would do something like this: var Predator = Class.create({ hunt: function() { return this.name + ' is hunting'; } }); var WaterPredator = Class.create(Predator, { hunt: function($super) { return $super() + ' under water'; } }) var Shark = Class.create({ initialize : function(name) { this.name = name; }, speak: function(msg) { return this.name + ': ' + msg; } }) // Create a temporary class and blend both prototypes in: var MixedIn = Class.create(WaterPredator, Shark.prototype); new MixedIn('Sharkie').name; // "Sharkie" new MixedIn('Sharkie').speak('Hello underwater world'); // "Sharkie: Hello underwater world" new MixedIn('Sharkie').hunt(); // "Sharkie is hunting under water" Best, kangax On Apr 25, 7:06 am, Mike Rumble <[EMAIL PROTECTED]> wrote: > > I don't see how "var d = new A(B); " is "chunkier" than "var e = new > > A(new (B));" : ) > > I guess it's a matter of taste then. I prefer Object.extend(this, obj) > to Object.extend(this, obj.prototype), just wanted to know if there > was really any difference in the two different approaches, and for the > record both function identically. > > > Am I correct that you want to extend instance with methods, and > > preserve their (methods') inheritance? > > Yeah that's spot on. > > On Apr 23, 10:53 pm, kangax <[EMAIL PROTECTED]> wrote: > > > Am I correct that you want to extend instance with methods, and > > preserve their (methods') inheritance? > > > - kangax > > > On Apr 23, 7:22 am, Mike Rumble <[EMAIL PROTECTED]> wrote: > > > > Hello, > > > > I can't make my mind up over some finer points of an API design and > > > would appreciate any feedback on my code. Hopefully this example is > > > clear... > > > > var A = Class.create({ > > > initialize : function(obj){ > > > Object.extend(this, obj) > > > } > > > > }); > > > > var B = { > > > method : function(){ > > > .... > > > } > > > > }; > > > > var C = { > > > method: function(){ > > > .... > > > } > > > > }; > > > > var d = new A(B); > > > var e = new A(C); > > > > On initialization each instance of class A is extended with methods > > > from a separate object via Object.extend. I've chosen not to use > > > Class#addMethods because each instance of can be extended with a > > > different object, and therefore the prototype chain of class A should > > > remain unaffected. > > > > So for so good. > > > > However I'm looking to use this taking advantage of Prototype's > > > inheritance features for the extension objects. I've currently got > > > something that looks like this... > > > > var A = Class.create({ > > > initialize : function(obj){ > > > Object.extend(this, obj.prototype) > > > } > > > > }); > > > > var B = Class.create({ > > > method : function(){ > > > .... > > > } > > > > }) > > > > var C = (B, { > > > method: function($super){ > > > $super(); > > > } > > > > }; > > > > var d = new A(B); > > > var e = new A(C); > > > > It works OK but feels a little clunky. To me it would make more sense > > > to do something like this... > > > > var A = Class.create({ > > > initialize : function(obj){ > > > Object.extend(this, obj) > > > } > > > > }); > > > > var B = Class.create({ > > > method : function(){ > > > .... > > > } > > > > }) > > > > var C = (B, { > > > method: function($super){ > > > $super(); > > > } > > > > }; > > > > var d = new A(new (B)); > > > var e = new A(new (C)); > > > > Anybody got any strong opinions on which approach is best? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Spinoffs" group. To post to this group, send email to rubyonrails-spinoffs@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---