Javascript functional inheritance pattern
by vtortola
JavaScript
var human = function(){
var me = {};
var _isAlive = true;
Object.defineProperty(me, "isAlive", {
get: function() { return _isAlive}
});
me.say=function(what){
if(_isAlive)
alert(what+'!');
else
throw new Error('I am dead!');
}
me.die=function(){
_isAlive = false;
}
return me;
};
var person = function(){
var me = human();
return me;
};
var ninja = function(){
var me = human();
me.say = function(what){
if(me.isAlive)
alert(what+', I am a ninja!');
else
throw new Error('I am dead!');
};
return me;
};
var myPerson = person();
myPerson.say('hi');
var myNinja = ninja();
myNinja.say('hello');
alert('Ninja Alive: ' +myNinja.isAlive);
myNinja.die();
alert('Ninja Alive: ' +myNinja.isAlive);
try{
myNinja.say('hello');
}catch(err){
alert('Error: ' + err.message);
}