Object.defineProperty Accessor and Descriptor
JS
S
JavaScriptExample showing the differences between Accessor and Descriptor types of properties https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
1var myObject = {}; // Creates a new object
2
3// Example of an object property added
4// with defineProperty with a data PROPERTY DESCRIPTOR
5Object.defineProperty(myObject, 'descriptorProp', {
6 value: 1,
7 writable: true,
8 enumerable: true,
9 configurable: true
10});
11
12
13// Example of an object property added
14// with defineProperty with a data PROPERTY DESCRIPTOR
15Object.defineProperty(myObject, 'descriptorPrivateProp', {
16 value: 1,
17 writable: true,
18 enumerable: false,
19 configurable: true
20});
21
22
23// with defineProperty with a data PROPERTY ACCESSOR
24let val = 2;
25Object.defineProperty(myObject, 'accessorProp', {
26 // Using shorthand method names (ES2015 feature).
27 get() { return val; },
28 set(newValue) { val = newValue; },
29 enumerable: true,
30 configurable: true
31});
32
33
34myObject.uniqueProp = 77;
35
36console.log(myObject) // xpto:1, accessorProp: ?
37console.log(myObject.accessorProp) // 2
38console.log(myObject.descriptorPrivateProp) // 1
39
40const copy = Object.assign({}, myObject); *non enumerables are not copied
41console.log(copy)
42console.log(copy.descriptorPrivateProp) // undefined
43console.log(copy.accessorProp) // 2Created on 6/13/2018