8.1 Khai báo phương thức tĩnh
Phương thức tĩnh trong JavaScript là các phương thức được định nghĩa trên lớp, chứ không phải trên các thể hiện của nó. Chúng được gọi trực tiếp trên lớp, không phải trên các đối tượng được tạo từ lớp này. Phương thức tĩnh thường được sử dụng để tạo các hàm hỗ trợ có liên quan đến lớp, nhưng không liên quan đến các đối tượng cụ thể.
Phương thức tĩnh được khai báo bằng cách sử dụng từ khóa static
trước định nghĩa
phương thức trong thân lớp.
Ví dụ:
- Các phương thức
add
vàmultiply
được khai báo là tĩnh bằng cách sử dụng từ khóastatic
- Những phương thức này được gọi trực tiếp trên lớp
MathHelper
, chứ không phải trên các thể hiện của nó
class MathHelper {
static add(a, b) {
return a + b;
}
static multiply(a, b) {
return a * b;
}
}
console.log(MathHelper.add(5, 3)); // 8
console.log(MathHelper.multiply(5, 3)); // 15
8.2 Sử dụng phương thức tĩnh
Phương thức tĩnh hữu ích trong các trường hợp kịch bản sau:
- Hàm hỗ trợ: phương thức tĩnh có thể được sử dụng để tạo các hàm tiện ích thực hiện các thao tác liên quan đến lớp.
- Phương thức tạo: phương thức tĩnh có thể được sử dụng để tạo các thể hiện của lớp với một logic nhất định.
- Xử lý dữ liệu: phương thức tĩnh có thể được sử dụng để xử lý dữ liệu liên quan đến lớp, nhưng không yêu cầu tạo các thể hiện của lớp.
Ví dụ về hàm hỗ trợ:
- Lớp
StringUtil
chứa các phương thức tĩnhcapitalize
vàreverse
, hoạt động với chuỗi - Những phương thức này được gọi trực tiếp trên lớp
StringUtil
class StringUtil {
static capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
static reverse(str) {
return str.split('').reverse().join('');
}
}
console.log(StringUtil.capitalize('hello')); // "Hello"
console.log(StringUtil.reverse('hello')); // "olleh"
Ví dụ về phương thức tạo:
Phương thức tĩnh fromObject
tạo một thể hiện của lớp Car
từ một đối tượng dữ liệu.
class Car {
constructor(brand, model) {
this.brand = brand;
this.model = model;
}
static fromObject(obj) {
return new Car(obj.brand, obj.model);
}
}
const carData = { brand: 'Toyota', model: 'Camry' };
const car = Car.fromObject(carData);
console.log(car.brand); // "Toyota"
console.log(car.model); // "Camry"
8.3 Phương thức tĩnh và kế thừa
Trong JavaScript, các phương thức tĩnh cũng được kế thừa bởi các lớp dẫn xuất. Các lớp dẫn xuất có thể sử dụng các phương thức tĩnh của lớp cơ sở hoặc ghi đè chúng.
Ví dụ về kế thừa phương thức tĩnh:
- Phương thức tĩnh
identify
được định nghĩa trong lớpAnimal
và được ghi đè trong lớpDog
- Phương thức
identify
được gọi trên cả hai lớp
class Animal {
static identify() {
return 'This is an animal';
}
}
class Dog extends Animal {
static identify() {
return 'This is a dog';
}
}
console.log(Animal.identify()); // "This is an animal"
console.log(Dog.identify()); // "This is a dog"
8.4 Truy cập phương thức tĩnh bên trong các phương thức khác
Phương thức tĩnh có thể được gọi bên trong các phương thức khác của lớp bằng cách sử dụng tên lớp.
Ví dụ:
Phương thức tĩnh calculateArea
được gọi bên trong một phương thức tĩnh khác describeCircle
bằng cách sử dụng từ khóa this
, trong ngữ cảnh này, tham chiếu đến lớp Geometry
.
class Geometry {
static calculateArea(radius) {
return Math.PI * radius * radius;
}
static describeCircle(radius) {
const area = this.calculateArea(radius);
return `A circle with radius ${radius} has an area of ${area.toFixed(2)}.`;
}
}
console.log(Geometry.describeCircle(5)); // "A circle with radius 5 has an area of 78.54."
8.5 Phương thức tĩnh và các thể hiện của lớp
Phương thức tĩnh không thể được gọi trên các thể hiện của lớp. Cố gắng gọi phương thức tĩnh trên một thể hiện sẽ dẫn đến lỗi.
Ví dụ:
Phương thức tĩnh add
được gọi trên lớp Calculator
, chứ không phải trên thể hiện của nó calc
.
class Calculator {
static add(a, b) {
return a + b;
}
}
const calc = new Calculator();
console.log(Calculator.add(3, 4)); // 7
console.log(calc.add(3, 4)); // Lỗi: calc.add không phải là một hàm
GO TO FULL VERSION