Lợi ích của setter và getter trong OOP JavaScript
Trong bài học trước, chúng ta đã tạo getter và setter cho mỗi thuộc tính. Có thể nảy sinh câu hỏi, tại sao cần những thứ phức tạp như vậy, vì trên thực tế có thể đạt được hiệu quả tương tự nếu làm cho các thuộc tính là công khai thay vì riêng tư.
Vấn đề là getter và setter có lợi thế: trước khi truy cập thuộc tính có thể thực hiện một số kiểm tra. Ví dụ, trong trường hợp của chúng ta, khi ghi tên và họ, chúng ta có thể kiểm tra rằng giá trị mới không phải là một chuỗi rỗng:
class User {
#name;
#surn;
setName(name) {
if (name.length > 0) {
this.#name = name;
} else {
throw new Error('name is incorrect');
}
}
setSurn(surn) {
if (surn.length > 0) {
this.#surn = surn;
} else {
throw new Error('surn is incorrect');
}
}
getName() {
return this.#name;
}
getSurn() {
return this.#surn;
}
}
Hãy kiểm tra xem điều này hoạt động thế nào. Đầu tiên, hãy tạo một đối tượng của lớp:
let user = new User;
Bây giờ hãy thử ghi một giá trị đúng:
user.setName('john');
Và bây giờ hãy thử ghi một giá trị không đúng:
user.setName(''); // lỗi
Trong lớp Employee, trong setter của
tuổi, hãy thực hiện kiểm tra rằng
tuổi phải từ 0 đến 120.
Trong lớp Employee, trong getter của
lương, hãy làm sao để
khi đọc lương, ở cuối giá trị của nó
sẽ được thêm ký hiệu đô la.