forked from teknosains/koleksi-belajar-javascript
-
Notifications
You must be signed in to change notification settings - Fork 1
/
18_02_object_setter_getter.js
85 lines (70 loc) · 2.06 KB
/
18_02_object_setter_getter.js
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/**
* Setter and Getter adalah default function yang di sediakan
* javascript pada Object.
*
* jadi pada object, kita bisa memasukan Data property dan kita bisa
* juga memasukan accossor property.
*
* Accessor property inilah yang disebut Setter n getter
*/
let user = {
firstname: "Agus", // data property
lastname: "Setiadi", // data property
get fullName() { // accessor property
return this.firstname + ' ' + this.lastname
},
set fullName(value) {
let fname = value.split(' ');
this.firstname = fname[0];
this.lastname = fname[1];
// diatas bisa di-single-line kan
// [this.firstname, this.lastname] = value.split(' ');
}
};
user.fullName = "Dedi Pekok"; // setter
// awas ! jangan panggil begini user.setFullName("Dedi Pekok");
// karena ini bukan function biasa,
console.log(user.fullName); //getter
/**
* lihat bahwa setter getter memungkin kita buat panggil bukan dengan function
* semacam ini
*/
user.fullName(); // Error
// tapi cukup
user.fullName; //valid...karena di internal, di javascript sdh prosesin buat kita
/**
* Menggunakan defineproperty & getter untuk menambahkan property baru
*
* misal kita punya object berikut
*/
let mahasiswa = {
name: "Budi",
ipk: 3.0
};
Object.defineProperty(mahasiswa, 'age', {
get() {
return 20;
}
});
//sekarang object mahasiswa punya property baru yaitu age
mahasiswa.age; // 20
// property baru age itu invisble bagi kita, makanya saat kita
console.log(mahasiswa); // tidak ada property age, tapi ia ttp bisa diakses
mahasiswa.age; // 20
/**
* Setter getter pada Class/Function Constructor
*/
function Mahasiswa(name, ipk) {
this.name = name;
this.ipk = ipk;
// bikin property baru pake cara gini
Object.defineProperty(this, 'age', {
get() {
return 20;
}
});
}
let budi = new Mahasiswa('Budi', 3.0);
budi.name; // Budi
budi.ipk; //3.0;
budi.age; // 20 ...//lihat sekarang bisa diakses