From: Brandon M. <bnd...@ho...> - 2000-12-05 16:13:05
|
Given the following code: <html> <title>SuperClass Test Page</title> <head> <script language="JavaScript" src="../js/SuperClass.js"> </script> <script language="JavaScript"> function t1(id) { this.id = id || "t1" } SuperClass.subclass(t1); function t2() { this.superConstructor("t2") } t1.subclass(t2); SuperClass.extendClasses(); t=new t2(); anotherT=new t1(); alert(t.id); alert(anotherT.id); </script> </head> <body bgcolor="#000000"></body> </html> I had just added the removeFromArray to allow SuperClass to be completely seperate from DynAPI, such that it is completly independent and usable for ANY javascript object chain. With the fix to the removeFromArray, everything works fine. I get an alert that says 't2', followed by another that says 't1'. Don't forget that you must call "SuperClass.extendClasses()" after all classes have been extended. The reason behind this is so that any extentions that you may add to the class before or after calling SuperClass.subclass() will be passed down the chain. Simply adding this before any instances are created, such as in the DynAPI.loadHandler will work. ----- Original Message ----- From: "Robert Rainwater" <rra...@ya...> To: "DynAPI Development List" <dyn...@li...> Sent: Tuesday, December 05, 2000 10:06 AM Subject: Re[2]: [Dynapi-Dev] Multiple Inheritence > Brandon, > > I noticed a couple of problems with your superClass: > > - removeFromArray does not work because of the 1st line. It should > say: > SuperClass.prototype.removeFromArray=function(arry, index, id) { > > - superConstructor always throws an error. > > Unless I am using it wrong, I believe these are errors in the code. > > I tried something like: > > function t1(id) { > this.id = id || "t1" > } > SuperClass.subclass(t1) > > function t2() { > this.superConstructor("t2") > } > t1.subclass(t2) > > After fixing the removeFromArray, an error occured at the > superConstructor call. > > -- > // Robert Rainwater > > On 12/4/2000, 11:21:14 PM EST, Brandon wrote about "[Dynapi-Dev] Multiple Inheritence": > > > This is my implementation of a SuperClass (Top-level class) that takes care of everything that you want. > > > It does not require maintaining of an array of inheritable methods, other than the methods which are "static" to the constructor (Not part of the prototype chain) It also maintains changes to the > > default object methods, such as .valueOf, and .toString. It also maintains a list of instances for each class, and has methods to delete/destroy objects which can be overriden to perform special > > functions when destroying complex objects. > > > Also, it takes care of many other problems that I have found. I have used it in developing a split API. My revision of the API is split for each browser, and for each object type. The SuperClass is > > a generic top-level that does not require that the next level object be a GUI object, such as DynAPI. I have been able to seperate event based objects with non event GUI objects. DynLayer no longer > > has any event structure. This increased the total number of layers that can be placed on a page, since there are some object that really don't need events. There are GUI objects that are only for > > events and do not inherit any Animation functions. Since animation functions can be applied to another class, as an extention, which the SuperClass then passes down the inheritance chain. > > > Now, two lines will have to be added to the DynAPI.loadHandler method: > > if (SuperClass) > > SuperClass.extendClasses(); > > Add this before creating any instances of any objects in the loadHandler. (Such as before creating the DynDocument, and before calling any events) Maybe even placed at the first line. > > > Ok.. also included is a sample usage with a borderFactory class. > > Add the following line at the end of DynLayer: > > SuperClass.inherit(DynLayer); > > > Then, the borderFactory should work. > > > Assign a border to ANY subclass of DynLayer: > > > myBorder=BorderFactory.getBorder("SimpleBevel",2,"Black"); > > > button=new DynLayer("MyButton1",50,50,100,50); > > button.setBgColor("Silver"); > > button.setBorder(myBorder); // You could also do: myBorder.assignTo(button) > > DynAPI.document.addChild(myBorder); > > > Tada.. it's done. > > This is a VERY effective border, and works with ANY subclass of DynLayer. It's large only because of all the comments, and the spacing. It could be crunched down to less than half it's current size. > > It might take a little more work to get everything up to speed, but with the stability I have achieved, and speed increase, I feel this is a great asset to the community. > > ----- Original Message ----- > > From: Eytan Heidingsfeld > > To: dyn...@li... > > Sent: Sunday, December 03, 2000 7:31 AM > > Subject: [Dynapi-Dev] Multiple Inheritence > > > > I wrote a function inherit that can do multipule inheritence. The only problem is that any methods/properties that you want to let other objects inherit must be included in an array called > > oInterface. I know this is all vague. If anyone want the code just email me offlist. > > 8an > > > _______________________________________________ > Dynapi-Dev mailing list > Dyn...@li... > http://lists.sourceforge.net/mailman/listinfo/dynapi-dev |