Kelas dalam JavaScript
Artikel ini menjelaskan kelas dalam JavaScript.
YouTube Video
Kelas dalam JavaScript
Dalam JavaScript, sebuah kelas menggabungkan konsep pemrograman berorientasi objek dan berfungsi sebagai cetak biru untuk objek. Dengan kelas, Anda dapat secara ringkas mendefinisikan properti dan metode suatu objek, meningkatkan kegunaan ulang dan organisasi kode. Sintaks kelas diperkenalkan di JavaScript dengan ES6.
Definisi Kelas
Sebuah kelas didefinisikan dengan kata kunci class
dan biasanya diinisialisasi dengan metode yang disebut sebagai constructor.
1class Person {
2 // Constructor method (called when the class is instantiated)
3 constructor(name, age) {
4 this.name = name; // Property definition
5 this.age = age;
6 }
7
8 // Method definition
9 greet() {
10 return `Hello, my name is ${this.name}`;
11 }
12}
13
14// Instantiation of the class
15const alice = new Person("Alice", 25);
16console.log(alice.greet()); // Hello, my name is Alice
- Kami mendefinisikan sebuah kelas dengan
class Person
. constructor
adalah metode khusus yang secara otomatis dipanggil ketika sebuah objek dibuat.- Kata kunci
this
mengacu pada instance (objek) kelas di dalam kelas.
Properti dan Metode Kelas
Sebuah kelas dapat mendefinisikan properti dan metode. Properti merepresentasikan atribut suatu objek, dan metode merepresentasikan fungsi yang dimilikinya.
1class Car {
2 constructor(brand, model) {
3 this.brand = brand;
4 this.model = model;
5 }
6
7 // Method definition
8 drive() {
9 console.log(`Driving a ${this.brand} ${this.model}`);
10 }
11}
12
13const car1 = new Car("Toyota", "Corolla");
14car1.drive(); // Driving a Toyota Corolla
Dalam contoh ini, sebuah kelas Car
dideklarasikan dengan properti brand
dan model
serta metode drive
.
Pewarisan Kelas
Kelas dapat mewarisi dari kelas lain. Dengan menggunakan pewarisan, Anda dapat membuat kelas baru berdasarkan kelas yang sudah ada dan menambahkan fungsionalitas tambahan padanya.
1class Animal {
2 constructor(name) {
3 this.name = name;
4 }
5
6 speak() {
7 console.log(`${this.name} makes a noise`);
8 }
9}
10
11// Inherit from the Animal class
12class Dog extends Animal {
13 constructor(name, breed) {
14 super(name); // Call the constructor of the parent class (Animal)
15 this.breed = breed;
16 }
17
18 // Override the method
19 speak() {
20 console.log(`${this.name} barks`);
21 }
22}
23
24const dog = new Dog("Rex", "German Shepherd");
25dog.speak(); // Rex barks
Dalam contoh ini, kelas Dog
mewarisi dari kelas Animal
.
- Kata kunci
extends
digunakan untuk mewarisi dari kelasAnimal
. - Dalam constructor pada kelas
Dog
,super()
digunakan untuk memanggil constructor dari kelas induk. Ini memungkinkan Anda untuk mewarisi proses inisialisasi dari kelas induk. - Di dalam kelas yang diwarisi, Anda dapat menimpa metode dari kelas induk. Dalam contoh ini, alih-alih "Rex membuat suara", "Rex menggonggong" ditampilkan.
Metode Statis
Ketika Anda mendefinisikan metode statis dalam sebuah kelas, metode tersebut dikaitkan dengan kelas itu sendiri. Metode statis dapat dipanggil tanpa harus diinstansiasi.
1class MathUtils {
2 // Static method
3 static add(a, b) {
4 return a + b;
5 }
6}
7
8console.log(MathUtils.add(5, 10)); // 15
Dalam contoh ini, kelas MathUtils
memiliki metode statis add
yang didefinisikan.
- Kata kunci
static
digunakan untuk mendefinisikan metode statis. - Metode statis tidak terkait dengan instance kelas dan dapat dipanggil langsung dari kelas itu sendiri.
Getters dan Setters
Dengan mendefinisikan getters dan setters dalam sebuah kelas, Anda dapat mengenkapsulasi pengambilan dan pengaturan properti.
1class Rectangle {
2 constructor(width, height) {
3 this.width = width;
4 this.height = height;
5 }
6
7 // Getter
8 get area() {
9 return this.width * this.height;
10 }
11
12 // Setter
13 set widthValue(newWidth) {
14 this.width = newWidth;
15 }
16}
17
18const rect = new Rectangle(10, 20);
19console.log(rect.area); // 200
20
21rect.widthValue = 15;
22console.log(rect.area); // 300
Dalam contoh ini, kelas Rectangle
mendefinisikan getter area
dan setter widthValue
.
- Getter (
get
) dipanggil saat mengambil nilai sebuah properti. - Setter (
set
) dipanggil saat menetapkan nilai sebuah properti.
Syntactic Sugar pada Kelas
Dalam JavaScript, sintaks kelas diimplementasikan secara internal menggunakan fungsi constructor dan prototipe. Sintaks kelas adalah syntactic sugar untuk menuliskannya dengan lebih ringkas.
1// Example without using class syntax
2function Person(name, age) {
3 this.name = name;
4 this.age = age;
5}
6
7Person.prototype.greet = function() {
8 return `Hello, my name is ${this.name}`;
9};
10
11const person = new Person("Alice", 25);
12console.log(person.greet()); // Hello, my name is Alice
Dalam contoh ini, fungsi constructor Person
didefinisikan, dan metode greet
didefinisikan menggunakan prototipe.
Penanganan this
Kata kunci this
di dalam sebuah kelas merujuk pada instance dari kelas tersebut. Namun, saat menggunakan this
dalam metode kelas, Anda perlu menyadari bahwa perilakunya dapat bervariasi tergantung pada ruang lingkup. Masalah dapat muncul terutama saat menggunakan metode sebagai fungsi callback.
1class Counter {
2 constructor() {
3 this.count = 0;
4 }
5
6 increment() {
7 this.count++;
8 console.log(this.count);
9 }
10}
11
12const counter = new Counter();
13setTimeout(counter.increment, 1000); // NaN
14// NaN, since this.count is undefined, it becomes NaN after incrementing.
Dalam kasus seperti itu, saat digunakan sebagai callback untuk setTimeout
, referensi this
yang dirujuk dapat berubah. Untuk menghindari masalah ini, disarankan untuk memperbaiki this
dengan menggunakan metode bind
atau menggunakan fungsi arrow.
1class Counter {
2 constructor() {
3 this.count = 0;
4 }
5
6 increment() {
7 this.count++;
8 console.log(this.count);
9 }
10}
11
12const counter = new Counter();
13
14// When using bind
15setTimeout(counter.increment.bind(counter), 1000);
16
17// When using an arrow function
18setTimeout(() => counter.increment(), 2000);
Ringkasan
- Kelas digunakan sebagai cetak biru untuk membuat objek, mendefinisikan properti dan metode.
- Anda dapat menggunakan pewarisan untuk memperluas sebuah kelas, dengan memanfaatkan konsep berorientasi objek.
- Metode statis terkait dengan kelas itu sendiri dan dapat digunakan tanpa membuat instance.
- Anda dapat mengenkapsulasi properti menggunakan getters dan setters.
- Sintaks kelas JavaScript adalah pemanis sintaks dan secara internal menggunakan pewarisan berbasis prototipe.
Dengan menggunakan kelas, Anda dapat menangani pemrograman berorientasi objek dengan lebih alami, serta meningkatkan penggunaan ulang dan pemeliharaan kode.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.