Mga Klase sa JavaScript
Ipinapaliwanag ng artikulong ito ang mga klase sa JavaScript.
YouTube Video
Mga Klase sa JavaScript
Sa JavaScript, ang isang class ay nagtataglay ng konsepto ng object-oriented programming at nagsisilbing blueprint para sa mga object. Sa pamamagitan ng mga klase, maaari mong maigsi ngunit malinaw na tukuyin ang mga properties at methods ng isang object, na nagpapahusay sa reusability at organisasyon ng code. Ang sintaks ng klase ay ipinakilala sa JavaScript kasama ng ES6.
Depinisyon ng Klase
Ang isang klase ay tinutukoy gamit ang keyword na class
at karaniwang ina-activate sa pamamagitan ng isang method na tinatawag na 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
- Tinutukoy natin ang isang class gamit ang
class Person
. - Ang
constructor
ay isang espesyal na method na awtomatikong tinatawag kapag ang isang object ay nilikha. - Ang keyword na
this
ay tumutukoy sa instance (object) ng klase sa loob ng klase.
Mga Katangian at Pamamaraan ng Klase
Ang isang klase ay maaaring magtukoy ng katangian (properties) at pamamaraan (methods). Ang mga katangian (properties) ay kumakatawan sa mga katangian ng isang object, at ang mga pamamaraan (methods) ay kumakatawan sa mga function nito.
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
Sa halimbawang ito, isang Car
na klase ang idineklara na may mga katangiang brand
at model
at isang pamamaraang drive
.
Pagmamana ng Klase
Maaaring magmana ang mga klase mula sa ibang mga klase. Sa pamamagitan ng pagmamana, maaari kang gumawa ng bagong klase ayon sa umiiral na klase at magdagdag ng karagdagang functionality dito.
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
Sa halimbawang ito, ang klase ng Dog
ay nagmana mula sa klase ng Animal
.
- Ang keyword na
extends
ay ginagamit upang magmana mula sa klase ngAnimal
. - Sa constructor ng klase ng
Dog
, ginagamit angsuper()
upang tawagin ang constructor ng parent class. Pinapayagan ka nito na magmana ng proseso ng initialisasyon ng parent class. - Sa loob ng namana na klase, maaari mong baguhin ang mga pamamaraan ng parent class. Sa halimbawang ito, sa halip na "Rex makes a noise", ang "Rex barks" ang ipinapakita.
Mga Static na Pamamaraan
Kapag nagtakda ka ng static na pamamaraan sa loob ng isang klase, ang pamamaraan ay nauugnay mismo sa klase. Pwedeng tawagin ang static na pamamaraan nang hindi kinakailangang gumawa ng instance.
1class MathUtils {
2 // Static method
3 static add(a, b) {
4 return a + b;
5 }
6}
7
8console.log(MathUtils.add(5, 10)); // 15
Sa halimbawang ito, ang klase na MathUtils
ay may tinukoy na static na pamamaraan na add
.
- Ang keyword na
static
ay ginagamit para itakda ang isang static na pamamaraan. - Ang mga static na pamamaraan ay hindi kabilang sa mga instance ng klase at pwedeng tawagin nang direkta mula sa klase mismo.
Mga Getter at Setter
Sa pamamagitan ng pagtatakda ng getters at setters sa isang klase, maari mong ma-encapsulate ang pagkuha at pagtatakda ng mga katangian.
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
Sa halimbawang ito, ang klase na Rectangle
ay nagtatakda ng isang getter na area
at isang setter na widthValue
.
- Ang Getter (
get
) ay tinatawag kapag kinukuha ang halaga ng isang katangian. - Ang Setter (
set
) ay tinatawag kapag itinakda ang halaga ng isang katangian.
Class Syntax Sugar
Sa JavaScript, ang syntax ng klase ay internally na ipinatutupad gamit ang constructor functions at prototypes. Ang syntax ng klase ay isang syntactic sugar para gawing mas maigsi ang paraan ng pagsusulat nito.
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
Sa halimbawang ito, ang isang constructor function na Person
ay tinukoy, at ang pamamaraan na greet
ay tinukoy gamit ang prototype.
Paggamit ng this
Ang keyword na this
sa loob ng isang klase ay tumutukoy sa instance ng klase na iyon. Gayunpaman, kapag ginagamit ang this
sa mga pamamaraan ng klase, kailangang tandaan na ang kilos nito ay maaring magbago depende sa saklaw. Maaaring magkaroon ng mga problema lalo na kapag ang mga pamamaraan ay ginagamit bilang callback functions.
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.
Sa mga ganitong kaso, kapag ipinasa bilang callback sa setTimeout
, maaring magbago ang tinutukoy ng this
. Upang maiwasan ang problemang ito, inirerekomendang ayusin ang this
gamit ang pamamaraan na bind
o gumamit ng arrow functions.
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);
Buod
- Ang mga klase ay ginagamit bilang mga blueprint para gumawa ng mga object, magtakda ng mga katangian at mga pamamaraan.
- Pwede mong gamitin ang inheritance upang palawakin ang isang klase gamit ang mga konsepto ng object-oriented.
- Ang mga static na pamamaraan ay kabilang sa klase mismo at maaaring gamitin nang hindi kinakailangang gumawa ng instance.
- Maari mong ma-encapsulate ang mga katangian gamit ang getters at setters.
- Ang class syntax ng JavaScript ay syntax sugar at sa loob nito ay gumagamit ng prototype-based inheritance.
Sa pamamagitan ng paggamit ng classes, maaari mong hawakan ang object-oriented programming nang mas natural, at mapabuti ang reusability at maintainability ng code.
Maaari mong sundan ang artikulo sa itaas gamit ang Visual Studio Code sa aming YouTube channel. Paki-check din ang aming YouTube channel.