Ví dụ bên dưới là một class Person có 3 thuộc tính: age, firstName, và lastName:
classPerson{public age:number;public firstName:string;public lastName:string;}
Để truy cập các thuộc tính của class Person, bạn có thể làm như sau:
let person =newPerson();
person.age =26;
Giả sử bạn gán một giá trị, cái giá trị được người dùng nhập từ form input để gán đến thuộc tính age:
person.age = inputAge;
Dó là giá trị nhập từ form input của người dùng, nên inputAge có thể là bất kỳ số nào. Để đảm bảo tính hợp lệ của tuổi, bạn có thể kiểm tra trước khi gán giá trị như sau:
if( inputAge >0&& inputAge <200){
person.age = inputAge;}
Nếu sử dụng đoạn kiểm tra này ở khắp nơi trong dự án, code của chúng ta sẽ bị lặp lại nhiều lần và trở nên cồng kềnh, khó bảo trì.
Để tránh lặp lại việc kiểm tra này, bạn có thể sử dụng setters và getters. Các setters và getters cho phép bạn kiểm soát quyền truy cập vào các thuộc tính của lớp.
chú ý:
- Một phương thức getter trả về giá trị của thuộc tính
- Một phương thức setter thì cập nhật giá trị của thuộc tính
Một phương thức getter bắt đầu với từ khóa get, một phương thức setter bắt đầu với từ khóa set.
classPerson{private _age:number;private _firstName:string;private _lastName:string;publicgetage(){returnthis._age;}publicsetage(theAge:number){if(theAge <=0|| theAge >=200){thrownewError('The age is invalid');}this._age = theAge;}publicgetFullName():string{return`${this._firstName}${this._lastName}`;}}
Cách hoạt động:
- Đầu tiên chúng ta thay đổi mức truy cập các thuộc tính age, firstName, và lastName từ public đến private.
- Thứ hai, thay đổi thuộc tính age đến _age.
- Thứ ba, tạo phương thức getter và setter cho thuộc tính _age. Trong phương thức setter, hãy kiểm tra tính hợp lệ của độ tuổi đầu vào trước khi gán nó cho thuộc tính _age.
Bây giờ, bạn có thể truy cập phương thức setter age như sau:
let person =newPerson();
person.age =10;
Lưu ý rằng lệnh gọi tới setter không có dấu ngoặc đơn như một phương thức thông thường. Khi bạn gọi person.age, phương thức setter với age sẽ được gọi. Nếu bạn chỉ định giá trị age không hợp lệ, setter với age sẽ gây ra lỗi:
person.age =0;
Error:
Error: The age is invalid
Khi bạn truy cập vào person.age, getter với age sẽ được gọi.
Phần sau thêm getters và setters vào thuộc tính firstName và lastName.
classPerson{private _age:number;private _firstName:string;private _lastName:string;publicgetage(){returnthis._age;}publicsetage(theAge:number){if(theAge <=0|| theAge >=200){thrownewError('The age is invalid');}this._age = theAge;}publicgetfirstName(){returnthis._firstName;}publicsetfirstName(theFirstName:string){if(!theFirstName){thrownewError('Invalid first name.');}this._firstName = theFirstName;}publicgetlastName(){returnthis._lastName;}publicsetlastName(theLastName:string){if(!theLastName){thrownewError('Invalid last name.');}this._lastName = theLastName;}publicgetFullName():string{return`${this.firstName}${this.lastName}`;}}
Tóm tắt:
- Sử dụng TypeScript getters/setters để kiểm soát các thuộc tính truy cập của một class
Nguồn: viblo.asia