SIDENOTE ON SUREBERT
If you want to use surebert for any AJAX stuff at artvoice, feel free. It allows you to easily post data to any page. Here is the non-compressed js version so you can see what is going on.
Prototypes
(e:zobar,59) if you already know this then maybe this is a waste because no one else is going to read it besides maybe (e:enknot) who already knows this because we talk shop all day at work, but in case you haven't thought about it, you can write very extensible objects in javascript using protypes.
In fact, I would argue that the prototype if the basis of complicated OOP in javascript. The prototype is applied to every instance of the object without having to copy the function as it is when declared as a function within the constructor.
Here is how I would write it
Greeter = function(yourName){
this.yourName = yourName;
}
Greeter.prototype.getTimeOfDay = function(timeOfDay){
alert('Good ' + timeOfDay + ', ' + this.yourName);
}
greetZ = new Greeter('Zobar');
greetP = new Greeter('Paul');
greetZ.getTimeOfDay('afternoon');//'Good afternoon, Zobar'
greetZ.getTimeOfDay('evening');// 'Good evening, Zobar'
greetZ.getTimeOfDay('evening');// 'Good evening, Paul'
[/box]
Because everything is an object in javascript, if you have mutliple prototypes for an object you can easily write them like below which look very neat and organized when used with large objects.
[box]
Greeter = function(yourName){
this.yourName = yourName;
}
//javascript object notation for attaching multiple protoypes to an object.Although you could write each one as Greeter.prototype.name of function, I think when have lots of protypes this looks neater. You can also add any of properties as a prototype. In this case I am also creating a property called job. that can be referred to as instanceName.job e.g. greetZ.job you can even attach protoype arrays this way
Greeter.prototype = {
'job' : 'programmer',
getTimeOfDay : function(timeOfDay){
alert('Good ' + timeOfDay + ', ' + this.yourName);
},
getRandNumber : function(min,max){
min = min || 0;
max = max || 100;
alert(Math.floor(Math.random()*max+min));
},
sayHello : function(){
alert("Hello, "+this.yourName);
}
}
greetZ = new Greeter('Zobar');
greetP = new Greeter('Paul');
greetZ.getTimeOfDay('afternoon');//'Good afternoon, Zobar'
greetZ.sayHello();// 'Hello, Zobar'
greetZ.getRandNumber(10,30);// 'Good evening, Paul'
Ah, but i did read it.. i didn't understand it, but i read it.
I have a newfound respect for Javascript. I did know about prototypes, but since I come from a class-based OOP background I probably don't grok them completely. Is there some way that prototypes can have their own prototypes, ie inheritance? Or am I missing a better way to do the same thing?
[The reason I'm all into this now is that I'm doing the database backend for our calendar in XUL :::link::: , and since XUL does not provide any kind of transactional form processing like X/HTML does, the only way to interact with the server is through XMLHttpRequest and its ilk.]
- Z