Modern JavaScript From The Beginning from Brad Traversy
function MemberFactory() {
this.createMember = function(name, type) {
let member;
if(type === 'simple') {
member = new SimpleMembership(name);
} else if (type === 'standard') {
member = new StandardMembership(name);
} else if (type === 'super') {
member = new SuperMembership(name);
}
member.type = type;
member.define = function() {
console.log(`${this.name} (${this.type}): ${this.cost}`);
}
return member;
}
}
const SimpleMembership = function(name) {
this.name = name;
this.cost = '$5';
}
const StandardMembership = function(name) {
this.name = name;
this.cost = '$15';
}
const SuperMembership = function(name) {
this.name = name;
this.cost = '$25';
}
const members = [];
const factory = new MemberFactory();
members.push(factory.createMember('John Doe', 'simple'));
members.push(factory.createMember('Chris Jackson', 'super'));
members.push(factory.createMember('Janice Williams', 'simple'));
members.push(factory.createMember('Tom Smith', 'standard'));
// console.log(members);
members.forEach(function(member) {
member.define();
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>JavaScript Sandbox: Patterns</title>
</head>
<body>
<h1>JavaScript Sandbox: Patterns</h1>
<script src="app.js"></script>
</body>
</html>