-
Notifications
You must be signed in to change notification settings - Fork 1
/
02_getOwnPropertyDescriptors.js
executable file
·54 lines (44 loc) · 1.91 KB
/
02_getOwnPropertyDescriptors.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
// Base object with properties, get and set:
const person = {
name: 'Max',
age: 30,
set personName(name) {
this.name = name;
},
get password() {
return `${this.name}${this.age}`;
},
};
console.log(person); // {name: "Max", age: 30}
console.log(person.password); // "Max30"
// Get property descriptors:
console.log(Object.getOwnPropertyDescriptors(person));
/*
age: {value: 30, writable: true, enumerable: true, configurable: true}
name: {value: "Max", writable: true, enumerable: true, configurable: true}
password: {get: ƒ, set: undefined, enumerable: true, configurable: true}
personName: {get: undefined, set: ƒ, enumerable: true, configurable: true}
*/
// Clone object:
// Using assign()
const admin = Object.assign({}, person);
// Using destructuring
const admin = { ...person };
console.log(admin); // {name: "Max", age: 30, personName: undefined, password: "Max30"}
console.log(Object.getOwnPropertyDescriptors(admin));
/*
age: {value: 30, writable: true, enumerable: true, configurable: true}
name: {value: "Max", writable: true, enumerable: true, configurable: true}
password: {value: "Max30", writable: true, enumerable: true, configurable: true}
personName: {value: undefined, writable: true, enumerable: true, configurable: true}
*/
// Clone object:
// Using .getOwnPropertyDescriptors()
const superAdmin = Object.defineProperties({}, Object.getOwnPropertyDescriptors(person));
console.log(Object.getOwnPropertyDescriptors(superAdmin));
/*
age: {value: 30, writable: true, enumerable: true, configurable: true}
name: {value: "Max", writable: true, enumerable: true, configurable: true}
password: {get: ƒ, set: undefined, enumerable: true, configurable: true}
personName: {get: undefined, set: ƒ, enumerable: true, configurable: true}
*/