August 16, 2008

a different take on OOP

function Mammal(){
	var t={}
	t.name="mammal";
	t.repro="birth";
	t.getSelf=function(){ return this; }
	return t;
}



function Cat(){
	t=new Mammal()
	t.name="cat";
	t.dob=now();
	t.meow=function(){alert("meow!"); }
   return t;
}


function Dog(){
	t=new Mammal()
	t.name="dog";
	t.dob=now();
	t.bark=function(){alert("bark!"); }
   return t;
}

function Freak(){
	t={}.merge(new Cat )
	t=t.merge( Dog() )
	t.name="dot";
	t.dob=now();
	 t.bark;
	t.yell=function(){alert("yoooo!"); }
   return t;
}



c=Freak()

// Result:

({
  name:"dot",
  repro:"birth",
  getSelf:(function () {return this;}), 
  dob:(new Date(1218939290256)), 
  meow:(function () {alert("meow!");}),
  bark:(function () {alert("bark!");}),
  yell:(function () {alert("yoooo!");}) 
})