| function |>METHOD:Person<|(n,race){ |
| this.constructor.population++; |
| |
| // ************************************************************************ |
| // PRIVATE VARIABLES AND FUNCTIONS |
| // ONLY PRIVELEGED METHODS MAY VIEW/EDIT/INVOKE |
| // *********************************************************************** |
| var alive=true, age=1; |
| var maxAge=70+|>GLOBAL:Math<|.round(|>GLOBAL:Math<|.random()*15)+|>GLOBAL:Math<|.round(|>GLOBAL:Math<|.random()*15); |
| function |>METHOD:makeOlder<|(){ return alive = (++age <= maxAge) } |
| |
| var myName=n?n:"John Doe"; |
| var weight=1; |
| |
| // ************************************************************************ |
| // PRIVILEGED METHODS |
| // MAY BE INVOKED PUBLICLY AND MAY ACCESS PRIVATE ITEMS |
| // MAY NOT BE CHANGED; MAY BE REPLACED WITH PUBLIC FLAVORS |
| // ************************************************************************ |
| this.|>METHOD:toString<|=this.|>METHOD:getName<|=function(){ return myName } |
| |
| this.|>METHOD:eat<|=function(){ |
| if (makeOlder()){ |
| this.dirtFactor++; |
| return weight*=3; |
| } else |>GLOBAL:formatter<|.println(myName+" can't eat, he's dead!"); |
| } |
| this.|>METHOD:exercise<|=function(){ |
| if (makeOlder()){ |
| this.dirtFactor++; |
| return weight/=2; |
| } else |>GLOBAL:formatter<|.println(myName+" can't exercise, he's dead!"); |
| } |
| this.|>METHOD:weigh<|=function(){ return weight } |
| this.|>METHOD:getRace<|=function(){ return race } |
| this.|>METHOD:getAge<|=function(){ return age } |
| this.|>METHOD:muchTimePasses<|=function(){ age+=50; this.dirtFactor=10; } |
| |
| |
| // ************************************************************************ |
| // PUBLIC PROPERTIES -- ANYONE MAY READ/WRITE |
| // ************************************************************************ |
| this.|>FIELD:clothing<|="nothing/naked"; |
| this.dirtFactor=0; |
| } |
| |
| |
| // ************************************************************************ |
| // PUBLIC METHODS -- ANYONE MAY READ/WRITE |
| // ************************************************************************ |
| Person.prototype.|>METHOD:beCool<| = function(){ this.|>FIELD:clothing<|="khakis and black shirt" } |
| Person.prototype.|>METHOD:shower<| = function(){ this.|>FIELD:dirtFactor<|=2 } |
| Person.prototype.|>METHOD:showLegs<| = function(){ |>GLOBAL:formatter<|.println(this+" has "+this.legs+" legs") } |
| Person.prototype.|>METHOD:amputate<| = function(){ this.legs-- } |
| |
| |
| // ************************************************************************ |
| // PROTOTYOPE PROERTIES -- ANYONE MAY READ/WRITE (but may be overridden) |
| // ************************************************************************ |
| Person.prototype.legs=2; |
| |
| |
| // ************************************************************************ |
| // STATIC PROPERTIES -- ANYONE MAY READ/WRITE |
| // ************************************************************************ |
| Person.population = 0; |
| |
| |
| |
| // Here is the code that uses the Person class |
| function |>METHOD:RunGavinsLife<|(){ |
| |>GLOBAL:formatter<|.println("Start") |
| var |>CLASS:gk<|=new Person("Gavin","caucasian"); //New instance of the Person object created. |
| var lk=new Person("Lisa","caucasian"); //New instance of the Person object created. |
| |>GLOBAL:formatter<|.println("There are now "+Person.population+" people"); |
| |
| gk.showLegs(); lk.showLegs(); //Both share the common 'Person.prototype.legs' variable when looking at 'this.legs' |
| |
| gk.race = "hispanic"; //Sets a public variable, but does not overwrite private 'race' variable. |
| |>GLOBAL:formatter<|.println(gk+"'s real race is "+gk.getRace()); //Returns 'caucasian' from private 'race' variable set at create time. |
| gk.eat(); gk.eat(); gk.eat(); //weight is 3...then 9...then 27 |
| |>GLOBAL:formatter<|.println(gk+" weighs "+gk.weigh()+" pounds and has a dirt factor of "+gk.dirtFactor); |
| |
| gk.exercise(); //weight is now 13.5 |
| gk.beCool(); //clothing has been update to current fashionable levels |
| gk.clothing="Pimp Outfit"; //clothing is a public variable that can be updated to any funky value |
| gk.shower(); |
| |>GLOBAL:formatter<|.println("Existing shower technology has gotten "+gk+" to a dirt factor of "+gk.dirtFactor); |
| |
| gk.muchTimePasses(); //50 Years Pass |
| Person.|>CLASS:prototype<|.shower=function(){ //Shower technology improves for everyone |
| this.dirtFactor=0; |
| } |
| gk.|>METHOD:beCool<|=function(){ //Gavin alone gets new fashion ideas |
| this.|>FIELD:clothing<|="tinfoil"; |
| }; |
| |
| gk.beCool(); gk.shower(); |
| |>GLOBAL:formatter<|.println("Fashionable "+gk+" at " |
| +gk.getAge()+" years old is now wearing " |
| +gk.clothing+" with dirt factor " |
| +gk.dirtFactor); |
| |
| gk.amputate(); //Uses the prototype property and makes a public property |
| gk.showLegs(); lk.showLegs(); //Lisa still has the prototype property |
| |
| gk.muchTimePasses(); //50 Years Pass...Gavin is now over 100 years old. |
| gk.eat(); //Complains about extreme age, death, and inability to eat. |
| } |
| |
| RunGavinsLife(); |