Skip to content

Instantly share code, notes, and snippets.

@OneCent01
Created February 10, 2018 21:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save OneCent01/8ae4dca4703457956457000b63bcc48a to your computer and use it in GitHub Desktop.
Save OneCent01/8ae4dca4703457956457000b63bcc48a to your computer and use it in GitHub Desktop.
var delegationObjects = {
Employee: (name) => Object.assign({
name,
hello: () => console.log(`Hi, I'm ${name}`)
}),
Fulltime: (name, role) => Object.assign(delegationObjects.Employee(name), {
role,
weeklyHours: 40
}),
Parttime: (name, role) => Object.assign(delegationObjects.Employee(name), {
role,
weeklyHours: 20
}),
Manager: (name, role) => Object.assign(delegationObjects.Fulltime(name, role), {
hourly: 30
}),
Salesman: (name, role) => Object.assign(delegationObjects.Fulltime(name, role), {
hourly: 20
}),
Temporary: (name, role) => Object.assign(delegationObjects.Parttime(name, role), {
hourly: 14,
weeklyHours: 30
})
};
var employeeDelegationFactory = function(name, role) {
if(role === 'manager') return delegationObjects.Manager(name, role);
else if(role === 'salesman') return delegationObjects.Salesman(name, role);
else if(role === 'temporary') return delegationObjects.Temporary(name, role);
};
var generateOffice = function() {
var cast = [];
cast.push(employeeDelegationFactory('michael', 'manager'));
cast.push(employeeDelegationFactory('jim', 'salesman'));
cast.push(employeeDelegationFactory('ryan', 'temporary'));
return cast;
};
var officeCast = generateOffice();
officeCast;
// adapted from https://medium.com/javascript-scene/3-different-kinds-of-prototypal-inheritance-es6-edition-32d777fa16c9
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment