Trong JavaScript, class là một cú pháp bậc cao được giới thiệu trong ES6 (ECMAScript 2015) để giúp việc tạo và quản lý các đối tượng trở nên dễ dàng và rõ ràng hơn. Dù JavaScript vẫn dựa trên nguyên mẫu (prototype-based), nhưng cú pháp class giúp lập trình viên làm việc theo hướng đối tượng (OOP) một cách quen thuộc hơn, giống như trong Java hoặc Python.

Khai báo class
Cú pháp để định nghĩa một class trong JavaScript như sau:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
introduce() {
console.log(`Hi, I’m ${this.name} and I’m ${this.age} years old.`);
}
}
// Sử dụng class
const person1 = new Person(“John”, 25);
person1.introduce(); // Output: Hi, I’m John and I’m 25 years old.
- constructor(): Là một phương thức đặc biệt được gọi khi khởi tạo một đối tượng mới từ class.
- this.name và this.age: Là các thuộc tính (properties) của đối tượng.
- introduce(): Là một phương thức (method) của class.
Kế thừa trong class (Inheritance)
Bạn có thể sử dụng từ khóa extends để kế thừa từ một class khác.
class Student extends Person {
constructor(name, age, grade) {
super(name, age); // Gọi constructor của lớp cha (Person)
this.grade = grade;
}
study() {
console.log(`${this.name} is studying in grade ${this.grade}.`);
}
}
const student1 = new Student(“Alice”, 20, “12th”);
student1.introduce(); // Output: Hi, I’m Alice and I’m 20 years old.
student1.study(); // Output: Alice is studying in grade 12th.
- extends Person: Giúp Student kế thừa các thuộc tính và phương thức từ Person.
- super(name, age): Gọi constructor của Person, giúp tránh việc viết lại code.
Getter và Setter
Getter và Setter giúp kiểm soát truy cập vào các thuộc tính của đối tượng.
class Rectangle {
constructor(width, height) {
this.width = width;
this.height = height;
}
get area() {
return this.width * this.height;
}
set size(value) {
this.width = value;
this.height = value;
}
}
const rect = new Rectangle(5, 10);
console.log(rect.area); // Output: 50
rect.size = 7;
console.log(rect.area); // Output: 49
- get area(): Tạo một thuộc tính ảo (không cần gọi như hàm rect.area()).
- set size(value): Cho phép thay đổi cả width và height thông qua rect.size = newValue.
Phương thức tĩnh (Static methods)
Phương thức tĩnh không thuộc về bất kỳ đối tượng nào của class mà thuộc về chính class đó.
class MathUtils {
static add(a, b) {
return a + b;
}
}
console.log(MathUtils.add(5, 3)); // Output: 8
- Không cần tạo đối tượng MathUtils, có thể gọi trực tiếp MathUtils.add(5, 3).
Class Expression
Ngoài cách khai báo class thông thường, bạn cũng có thể sử dụng class expression.
const Car = class {
constructor(brand) {
this.brand = brand;
}
};
const myCar = new Car(“Toyota”);
console.log(myCar.brand); // Output: Toyota
- Class expression có thể gán vào biến, giống như function expression.
Private fields (trường riêng tư – ES2020)
JavaScript hỗ trợ thuộc tính riêng tư bằng dấu # trước tên thuộc tính.
class BankAccount {
#balance;
constructor(balance) {
this.#balance = balance;
}
getBalance() {
return this.#balance;
}
}
const account = new BankAccount(1000);
console.log(account.getBalance()); // Output: 1000
console.log(account.#balance); // Error: Private field ‘#balance’ must be declared in an enclosing class
- #balance: Là một thuộc tính riêng tư, chỉ có thể truy cập bên trong class.
Class với Symbol
Sử dụng Symbol để tạo thuộc tính riêng tư, nhưng vẫn có thể truy cập nếu biết Symbol.
const secret = Symbol(“secret”);
class User {
constructor(name, password) {
this.name = name;
this[secret] = password;
}
checkPassword(pass) {
return this[secret] === pass;
}
}
const user = new User(“admin”, “1234”);
console.log(user.checkPassword(“1234”)); // Output: true
console.log(user.secret); // Output: undefined
- Dùng Symbol để ẩn một thuộc tính mà không bị truy cập trực tiếp.
Tổng kết
- JavaScript class giúp dễ dàng làm việc với lập trình hướng đối tượng (OOP).
- Hỗ trợ kế thừa (extends), getter/setter, phương thức tĩnh, thuộc tính riêng tư (#).
- Dù class trông giống như các ngôn ngữ OOP khác, nhưng JavaScript vẫn là prototype – based.
Giảng viên Võ Văn Mỹ
Bộ môn Công nghệ thông tin
FPT Polytechnic TP HCM

