class Developer {
constructor(name) {
this.name = name;
}
commitChange() {
console.log(`${this.name} is committing changes`);
}
}
function canBuildUI(developer) {
return {
buildUI: () => {
console.log(`${developer.name} is building UI...`);
}
}
}
function canBuildAPI(developer) {
return {
buildAPI : () => {
console.log(`${developer.name} is building API...`);
}
}
}
function canDeployApp(developer) {
return {
deployApp : () => {
console.log(`${developer.name} is deploying app...`);
}
}
}
function createFrontEndDeveloper(name) {
const developer = new Developer(name); //Membuat variabel developer mengembalikan nilai objek dengan argumen name yang nilainya diambil dari argumen createFrontEndDeveloper
return Object.assign(developer, canBuildUI(developer)); //mengkomposisikan kemampuan" akan dikirim ke canBuildUI(developer)
}
function createBackEndDeveloper(name) {
const developer = new Developer(name);
return Object.assign(developer, canBuildAPI(developer));
}
function createDevOps(name) {
const developer = new Developer(name);
return Object.assign(developer, canDeployApp(developer));
}
function createFullStackDeveloper(name) {
const developer = new Developer(name);
return Object.assign(developer, canBuildUI(developer), canBuildAPI(developer), canDeployApp(developer));
}
//Untuk pemanggilan harus variabel.function yang akan dipanggil();
const frontEndDeveloper = createFrontEndDeveloper('Fulan');
frontEndDeveloper.commitChange();
frontEndDeveloper.buildUI();
console.log(`is ${frontEndDeveloper.name} developer ?`, frontEndDeveloper instanceof Developer);
const backEndDeveloper = createBackEndDeveloper('Fulana');
backEndDeveloper.commitChange();
backEndDeveloper.buildAPI();
console.log(`is ${backEndDeveloper.name} developer ?`, backEndDeveloper instanceof Developer);
const devOps = createDevOps('Fulani');
devOps.commitChange();
devOps.deployApp();
console.log(`is ${devOps.name} developer ?`, devOps instanceof Developer);
const fullStackDeveloper = createFullStackDeveloper('Fulanah');
fullStackDeveloper.commitChange();
fullStackDeveloper.buildUI();
fullStackDeveloper.buildAPI();
fullStackDeveloper.deployApp();
console.log(`is ${fullStackDeveloper.name} developer ?`, fullStackDeveloper instanceof Developer);