Nhảy tới nội dung

Getter và Setter (set, get)

Getter và Setter là interceptor cho property (có ý nghĩa như truy cập, gán giá trị, theo dõi).

Cách khai báo như sau:

ts
class Human {
private _name: string;
 
public constructor(name: string) {
this._name = name;
}
 
// Khai báo Getter
get name(): string {
return this._name;
}
 
// Khai báo Setter
set name(name: string) {
this._name = name;
}
}
 
const human = new Human("");
// Sử dụng Setter
human.name = `Nguyen Van An`;
// Sử dụng Getter
console.log(human.name);
Nguyen Van An
ts
class Human {
private _name: string;
 
public constructor(name: string) {
this._name = name;
}
 
// Khai báo Getter
get name(): string {
return this._name;
}
 
// Khai báo Setter
set name(name: string) {
this._name = name;
}
}
 
const human = new Human("");
// Sử dụng Setter
human.name = `Nguyen Van An`;
// Sử dụng Getter
console.log(human.name);
Nguyen Van An

Khác với method, khi gọi getter/setter không cần dùng ().

ts
// Getter
console.log(human.name); // Cách sử dụng Getter đúng
console.log(human.name()); // Lỗi: human.name is not a function
This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'? Type 'String' has no call signatures.6234This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'? Type 'String' has no call signatures.
"Nguyen Van An"
 
// Setter
human.name = "Nguyen Van An"; // Cách sử dụng Setter đúng
human.name("Nguyen Van An");
This expression is not callable. Type 'String' has no call signatures.2349This expression is not callable. Type 'String' has no call signatures.
ts
// Getter
console.log(human.name); // Cách sử dụng Getter đúng
console.log(human.name()); // Lỗi: human.name is not a function
This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'? Type 'String' has no call signatures.6234This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'? Type 'String' has no call signatures.
"Nguyen Van An"
 
// Setter
human.name = "Nguyen Van An"; // Cách sử dụng Setter đúng
human.name("Nguyen Van An");
This expression is not callable. Type 'String' has no call signatures.2349This expression is not callable. Type 'String' has no call signatures.

Getter

Cú pháp của Getter:

ts
get tên(): kiểu_dữ_liệu {
// Xử lý nếu cần
return giá_trị;
}
ts
get tên(): kiểu_dữ_liệu {
// Xử lý nếu cần
return giá_trị;
}

Getter không thể có tham số. Phải chỉ định giá trị trả về.

Setter

Cú pháp của Setter:

ts
set tên(biến: kiểu_dữ_liệu) {
// Xử lý nếu cần
// Xử lý lưu giá trị
}
ts
set tên(biến: kiểu_dữ_liệu) {
// Xử lý nếu cần
// Xử lý lưu giá trị
}

Setter bắt buộc phải có đúng một tham số. Không thể chỉ định giá trị trả về.