Tarek Ziadé wrote:
>
>>Tarek,
>>
>>you only need to use a class if you want to pass some arguments to the
>>constructor otherwise use a literal object like
>>var CPSMystuff = {...}
>>
>>Besides, your pattern creates memory leaks!, if you instanciate a new
>>object or a class just to simulate a namespace, your browser will run
>>out of memory sooner or later.
>>
>>
>
>?
>
>
>
Your pattern of creating namespaces using classes creates memory leaks,
I'll post a demo, so you can see for yourself..
>>think about what happens when you do:
>>
>> var CPSMyStuff = Class.create();
>>
>> CPSMyStuff.prototype = { buttonClick: function () {
>> ...
>> }
>> }
>>
>>
>> var my_stuff = new CPSMyStuff(); <==== put that in a loop and what
>>your browser die...
>> my_stuff.buttonClick()
>>
>>
>>
>:)
>
>why do you want to put that in a loop ?
>sorry i don't get that point,
>put a loop over any instanciation and it consumes memory, yes.
>
>
>
The browser's garbage collector is called when the page is closed or
reloaded. So as long as you run the application on a same page, it is as
if you
were inside a loop. Putting the code inside a loop helps you identify
memory leaks as the ones you have just created.
>Jean-Marc,
>
>i think you are mixing for this particular use case,
>between the fonction concept, the class concept, and the namespace concept,
>the objective is not to create one instance of a given class type for
>just one function.
>
>
>
I know, you could add as many functions in the example that I gave as
you want, there would be no difference, but before that, look again how
prototype.js or scriptaculous are written: top-level namespaces are
object literal, then inside these objects (Form, Element, ..) you have
functions, and classes, variables.
so it's not even as you say it is.
>like i said you can hook javascript code any way you want. but we should
>try to think o-o a bit here, for reusability, on the top of prototype
>framework.
>
>
>
yes, but not everything needs to be a class either, for instance in
Element.getStyle(obj), Element is not a class because it doesn't need to
be, it is a collection of object that are classes or function, but the
object corresponding top the 'Element' namespace needs not be a class.
good example of classes are Effects, Widgets, ... because they
correspond to individual instances that have a identity of their own.
>the o-o way would be to ask ourselves: where would the buttonClick
>function fit the best ?
>
>
in OO way you should first have an object.
>is it a simple, independant function ? or is it related to an object ?
>could it be added in a class that gathers all functions aimed to
>interact with forms, with the
>whole container ?
>
you need an object first. In some cases when it makes no sense to
associate functions to classes, you will simply place them under a same
object's namespace, as it's the case in prototype's Position object
(which gives some information about the position of an object on the
page). The reason Position is not a class is because you'd run out of
memory very fast if instead of writing:
var position = Position.page(element)
you wrote (as you've already suggested)
var positionInfo = new Position(element);
var position = positionInfo.page()
think about a drag-and-drop situation for instance.
>
>can it evolve and start to interact with other functions ? etc...
>
>
>
I know, I know, but that's not the point.
>I think we can discuss all this with the material i am doing in the
>incoming CPS javascript guideline.
>
>thanks for this feedback, i really think the guideline will be improved
>through this kind of talks.
>
>
>Tarek
>
>
>
what about the memory leaks?
/JM
Hosting: Nuxeo: Zope service provider