Pelajari konsep OOP (Object-Oriented Programming) dalam JavaScript untuk membangun aplikasi yang terstruktur
Pemrograman Berorientasi Objek (OOP) adalah paradigma pemrograman yang menggunakan objek dan kelas untuk mengorganisasi kode menjadi unit yang dapat digunakan kembali.
// Object literal
const user = {
name: 'John',
age: 30,
greet: function() {
console.log(`Hello, my name is ${this.name}`);
}
};
// Constructor function
function Person(name, age) {
this.name = name;
this.age = age;
this.greet = function() {
console.log(`Hello, I'm ${this.name}`);
};
}
const person1 = new Person('Alice', 25);
đ Penjelasan Detail:
âĸ Object literal
- Cara sederhana membuat objek
âĸ Constructor function
- Fungsi khusus untuk membuat objek
âĸ this
- Referensi ke objek saat ini
âĸ new
- Operator untuk membuat instance baru
âĸ Prototype
- Mekanisme pewarisan di JavaScript
// Class syntax (ES6)
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
// Inheritance
class Dog extends Animal {
speak() {
console.log(`${this.name} barks.`);
}
}
const dog = new Dog('Rex');
dog.speak(); // Rex barks.
Class syntax didukung di semua browser modern (Chrome 49+, Firefox 45+, Safari 10+, Edge 13+). Untuk browser lama, gunakan Babel untuk transpilasi.
Concept | Description | Example |
---|---|---|
Encapsulation |
Mengelompokkan data dan fungsi terkait | class User { ... } |
Inheritance |
Pewarisan sifat dari class lain | class Admin extends User |
Polymorphism |
Kemampuan objek merespon berbeda | method overriding |
Abstraction |
Menyembunyikan detail kompleksitas | private methods |
đ Penjelasan Detail:
âĸ Encapsulation - Mengelompokkan data dan perilaku terkait
âĸ Inheritance - Membuat hierarki class yang dapat diperluas
âĸ Polymorphism - Method yang sama memberikan hasil berbeda
âĸ Abstraction - Menyembunyikan detail implementasi yang kompleks
Feature | ES5 | ES6+ |
---|---|---|
Class definition | function Person() {} |
class Person {} |
Inheritance | Person.prototype = Object.create(Animal.prototype) |
class Person extends Animal |
Static methods | Person.someMethod = function() {} |
static someMethod() {} |
Private fields | Convention: _privateField |
#privateField |
Getters/Setters | Object.defineProperty() |
get name() {} |
ES6+ memperkenalkan sintaks class yang lebih bersih, tetapi di balik layarnya masih menggunakan prototype-based inheritance seperti ES5.
Gunakan class untuk kompleksitas menengah-tinggi, komposisi daripada pewarisan untuk reuse code, dan pertahankan SRP (Single Responsibility Principle).
// â
Good - Composition over inheritance
class Walker {
walk() { console.log('Walking...'); }
}
class Talker {
talk() { console.log('Hello!'); }
}
class Human {
constructor() {
this.walker = new Walker();
this.talker = new Talker();
}
}
// â Avoid - Deep inheritance chains
class A { ... }
class B extends A { ... }
class C extends B { ... }
class D extends C { ... }
đ Penjelasan Detail:
âĸ Komposisi > Pewarisan - Lebih fleksibel dan mudah dikelola
âĸ Single Responsibility - Setiap class harus punya satu tanggung jawab
âĸ Open/Closed Principle - Terbuka untuk ekstensi, tertutup untuk modifikasi
âĸ Law of Demeter - Minimalkan ketergantungan antar class
âĸ SOLID Principles - Pedoman desain OOP yang baik
Pelajari lebih lanjut tentang OOP JavaScript di MDN Web Docs atau buku "JavaScript: The Good Parts" oleh Douglas Crockford.
ES2022 memperkenalkan fitur class fields dan private methods yang membuat OOP di JavaScript semakin matang dan powerful.