Kiểm tra hợp lệ và tác dụng phụ
Thuộc phần Lập trình hướng đối tượng trong hành trình JavaScript của Coddy. Bài học 45 trên 56.
Getter và setter không chỉ đọc và ghi thuộc tính, chúng còn có thể xác thực đầu vào và kích hoạt tác động phụ khi giá trị thay đổi.
Hãy tạo một lớp User có kiểm tra tính hợp lệ:
class User {
constructor(name, age) {
this._name = name;
this._age = age;
}
get age() {
return this._age;
}
set age(value) {
// Kiểm tra tuổi là một số và nằm trong khoảng hợp lý
if (typeof value !== 'number') {
throw new Error('Age must be a number');
}
if (value < 0 || value > 120) {
throw new Error('Age must be between 0 and 120');
}
this._age = value;
// Tác dụng phụ: ghi nhật ký khi tuổi thay đổi
console.log(`Age updated to ${value}`);
}
}Bây giờ, khi dùng phương thức setter, việc xác thực sẽ diễn ra tự động:
const user = new User('Alice', 25);
// Dòng này chạy được
user.age = 30; // Ghi log: "Age updated to 30"
// Dòng này gây ra lỗi
user.age = -5; // Lỗi: Tuổi phải từ 0 đến 120
// Dòng này cũng gây ra lỗi
user.age = "thirty"; // Lỗi: Tuổi phải là một sốKiểm tra tính hợp lệ = Kiểm tra xem giá trị có hợp lệ hay không trước khi lưu
Tác dụng phụ = Các hành động bổ sung xảy ra khi một thuộc tính thay đổi
Thử thách
Bạn được cung cấp một lớp BankAccount với setter cơ bản. Nhiệm vụ của bạn là hoàn thiện setter balance.
Thêm vào setter:
- Xác thực: Kiểm tra xem
valuecó phải là số hay không HOẶC có nhỏ hơn 0 hay không. Nếu có, hãy dùngconsole.log("Invalid balance")và dùngreturnđể thoát khỏi setter - Tác dụng phụ: Sau khi lưu một giá trị hợp lệ, dùng
console.log(\`Balance updated to $${value}\`)
Tự làm thử
import { BankAccount } from './account.js';
// Các test case
const account = new BankAccount("Savings");
// Test 1: Số dư hợp lệ
account.balance = 100;
console.log(account.balance);
// Test 2: Invalid balance (số âm)
account.balance = -50;
console.log(account.balance);
// Test 3: Invalid balance (không phải số)
account.balance = "abc";
console.log(account.balance);
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Đối tượng và từ khóa this
Ôn nhanh: đối tượngThêm phương thức vào đối tượngTìm hiểu từ khóa thisHàm khởi tạoTừ khóa newThử thách ôn tập7Kế thừa và từ khóa extends
Kế thừaQuan hệ "là một"Từ khóa extendsPhương thức super()Kế thừa thuộc tính và phương thứcThử thách ôn tập13Kết hợp hay kế thừa
Quan hệ “có một” và “là một”Những hạn chế của kế thừa nhiều tầngXây dựng đối tượng5Đóng gói và quyền truy cập
Đóng góiTrường công khai và trường riêng tưPhương thức riêng tưThử thách ôn tập8Tổ chức code OOP
Tổ chức các lớp thành module11Dự án: Trình hiển thị hình dạng
Thiết lập: lớp Hình dạng và xuấtKế thừa lớp Hình trònGhi đè và phương thức diện tíchBộ đếm hình dạng tĩnh6Dự án: Tài khoản ngân hàng đơn giản
Lớp BankAccountGửi tiền và rút tiềnSố dư dưới dạng thuộc tính riêng tư9Phương thức và thuộc tính tĩnh
Cấp lớp và cấp instanceThuộc tính tĩnhPhương thức tiện ích tĩnhThử thách ôn tập12Getter và setter
Từ khóa get và setThuộc tính tính toánKiểm tra hợp lệ và tác dụng phụThử thách ôn tậpTự luyện tập: Trình biên dịch JavaScript online