Phương thức get và set
Nếu không muốn sử dụng phương thức get và set mặc định của object thì chúng ta có thể thay đổi các hàm này. Hàm set được gọi khi ghi giá trị vào thuộc tính, hàm get sẽ chạy khi chúng ta đọc giá trị từ thuộc tính.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
let user = {
name: "John",
surname: "Smith",
get fullName() {
return `${this.name} ${this.surname}`;
},
set fullName(value) {
[this.name, this.surname] = value.split(" ");
}
};
user.fullName = "Bill Gates"; // gọi hàm set fullName()
// trả về Bill Gates
console.log(user.fullName); // gọi hàm get fullName()
// trả về {
// name: "Bill",
// surname: "Gates",
// fullName: "Bill Gates"
// }
console.log(user);
for(let key in user) {
console.log(key); // name, surname, fullName
}
|
Sử dụng hàm Object.defineProperty()
Khi sử dụng hàm defineProperty
mà định nghĩa hai hàm get
hoặc set
thì không thể set giá trị writable
. Giá trị writable
lúc này được xem là true
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
let user = {
name: "John",
surname: "Smith"
};
// mặc định enumerable, configurable của fullName đều là false,
// writable được xem là true
Object.defineProperty(user, 'fullName', {
get() {
return `${this.name} ${this.surname}`;
},
set(value) {
[this.name, this.surname] = value.split(" ");
}
});
user.fullName = "Bill Gates";
console.log(user.fullName); // Bill Gates
for (let key in user) {
console.log(key); // name, surname
}
console.log(user); // { name: "Bill", surname: "Gates" }
console.log(Object.getOwnPropertyDescriptor(
user,
'fullName'
));
// { get: [Function: get], set: [Function: set],
// enumerable: false, configurable: false }
|