Skip to content

Instantly share code, notes, and snippets.

@a21ns1g4ts
Last active November 12, 2021 15:58
Show Gist options
  • Save a21ns1g4ts/4e1da15f08a1f51198bc8b63a9c298ef to your computer and use it in GitHub Desktop.
Save a21ns1g4ts/4e1da15f08a1f51198bc8b63a9c298ef to your computer and use it in GitHub Desktop.
factory-functions
<script src="zoologicMonitor.js"></script>
<script lang="javascript">
const dog = makeDog(
{
name:"Laio" ,
id: 1 ,
}
);
dog.fly();
const person = makePerson(Person.findPerson(2));
person.walk();
</script>
const walkable = {
walk(){
eventSender.emitEvent(events[0], {
name: this.name, id: this.id, type: this.type
})
},
}
const sleepable = {
sleep(){
eventSender.emitEvent(events[1] , {
name: this.name, id: this.id, type: this.type
})
}
}
const flyable = {
fly(){
eventSender.emitEvent(events[2] , {
name: this.name, id: this.id, type: this.type
})
},
}
const logable = {
log(event, agent){
console.log(`
event: ${event.name};
event_id: ${event.id};
agent: ${agent.name};
agent_id: ${agent.id};
agent_type: ${agent.type};
`)
}
}
const Event = {
findEvent(id){
return events[id]
}
}
const Agent = {
findAgent(id){
return agents[id]
},
}
const Person = Object.assign({
findPerson(id){
let agent = Agent.findAgent(id)
if(agent.type === 'person')
return agent
}
}, walkable)
const Dog = Object.assign({} , walkable)
const eventSender = Object.assign({
emitEvent(event , agent){
this.log(event , agent)
}
}, logable);
const Cat = Object.assign({
findCat(id){
let agent = Agent.findAgent(id);
if(agent.type === 'cat')
return agent
}
}, walkable, flyable, sleepable)
const makePerson = function (obj = {}){
return Object.assign({
name: obj.name,
id: obj.id,
type: "person"
}, Person)
}
const makeCat = function(obj = {}){
return Object.assign({
name : obj.name,
id : obj.id,
type : "cat"
}, Cat)
}
function makeDog(obj = {}){
return Object.assign({
name: obj.name,
id: obj.id,
type: "dog"
}, Dog, flyable)
};
events = [
{id : 0 , name: "walk" },
{id : 1 , name: "sleep" },
{id : 1 , name: "fly" },
]
agents = [
{id:0 , name : "Escureto Mimoso" , type: "cat"},
{id:1 , name : "Barte Lamarin" , type: 'cat'},
{id:2 , name : "Atila Silva" , type: 'person'}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment