Getter định nghĩa thuộc tính của đối tượng, nhưng giá trị thuộc tính không được tính toán ngay. Giá trị chỉ tính khi bị truy cập. Do đó, getter trì hoãn chi phí tính toán cho đến khi cần giá trị.
Smart / Memoized / Lazy Getters là kỹ thuật trì hoãn (lazify) và cache kết quả. Giá trị chỉ tính lần đầu khi getter được gọi. Các lần truy cập sau dùng giá trị đã cache, không tính lại.
Không dùng lazy getter cho thuộc tính có giá trị thay đổi. Vì getter sẽ không tính lại giá trị mới.
Ví dụ minh họa
const obj = {
get expensiveValue() {
delete this.expensiveValue; // xóa getter
return this.expensiveValue = computeExpensiveValue(); // gán giá trị tính toán
}
};
Lần đầu truy cập obj.expensiveValue → chạy computeExpensiveValue() → gán kết quả vào property → xóa getter. Lần sau truy cập property trực tiếp, không qua getter.