Skip to content

Commit

Permalink
Merge pull request #18 from sfeir-open-source/ylag_descriptors_objects
Browse files Browse the repository at this point in the history
  • Loading branch information
Xartok authored May 21, 2022
2 parents e6a2b48 + 151172d commit 2857578
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,50 @@ Object.defineProperty(sword, 'blade', {
sword.blade; // steel
```
<!-- .element: class="fragment" -->

##==##

<!-- .slide: class="with-code" -->

# Object.freeze

- Permet de geler un objet déjà défini, c'est-à-dire rendre ses propriétés non modifiables.

```javascript
'use strict';
const o1 = { a: 1 };
Object.freeze(o1);

o1.a = 2; // Error: Cannot assign to read only property 'a' of object '#<Object>'
```
<!-- .element: class="fragment" -->

##==##

<!-- .slide: class="with-code" -->

# Object.freeze

- Attention le gel est superficiel (shallow).

```javascript
'use strict';
const o1 = { foo: { bar: 'baz' }};
Object.freeze(o1);

o1.foo.bar = 'fizz';
o1.foo; // { bar: 'fizz' }
```
<!-- .element: class="fragment" -->

##==##

<!-- .slide -->

# Object.freeze / preventExtensions / seal

||Pas de nouvelles propriétés|Propriétés non configurables|Propriété non modifiables|
|-|-|-|-|
Object.preventExtensions|X|||
Object.seal|X|X||
Object.freeze|X|X|X|
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@
<br />

```javascript
const o1 = { a: 1 }, o2 = { b: 2 };
const object1 = { a: 1 }, object2 = { b: 2 };

Object.defineProperty(o2, 'f', {
Object.defineProperty(object2, 'f', {
value: 6,
enumerable: false
});

Object.defineProperty(o2, 'g', {
Object.defineProperty(object2, 'g', {
value: 8,
enumerable: true
});
Expand All @@ -36,19 +36,15 @@ Object.defineProperty(o2, 'g', {
<br />

```javascript
const newO = Object.assign(target, o1, o2 );

// seuls a, b et Symbol('h') sont copiés

target.a; // 1
target.b; // 2
target.f; // undefined
target.g; // 8

newO.a; // 1
newO.b; // 2
newO.f; // undefined
newO.g; // 8
// les propriétés sont copiées de object1 et object2 dans target
// puis on récupère l'objet fusionné dans newObject
const newObject = Object.assign(target, object1, object2 );

// mais seules les propriétés énumérables "a, b et Symbol('h')" sont copiées
newObject.a; // 1
newObject.b; // 2
newObject.f; // undefined
newObject.g; // 8
```
<!-- .element: class="fragment" -->

Expand All @@ -65,6 +61,31 @@ l'autre manière de copier un objet est le spread operator

<!-- .slide: class="with-code" -->

# Object.assign

- Attention la copie est superficielle (shallow).

```javascript
const o1 = { a: 1, foo: { bar: 'baz' }};
const o2 = Object.assign({}, o1);

o1.foo; // { bar: 'baz' }
o2.foo; // { bar: 'baz' }

o2.a = 2;
o2.foo.bar = 'fizz';

o1.foo; // { bar: 'fizz' }
o2.foo; // { bar: 'fizz' }

o1.a // 1
o2.a // 2
```

##==##

<!-- .slide: class="with-code" -->

# Fonctions utilitaires sur Object

- Nouvelles fonctions utilitaires values() et entries(), keys() déjà en ES5
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,13 @@ const pairs = nums.map(v => ({ even: v, odd: v + 1 }));
```javascript
const nums = [1, 2, 3, 4, 5, 6];

const add = nums.map((v, _,i) => v + i)
const add = nums.map((v, i) => v + i)
// ou
const add2 = nums.map((v, i) => { return v + i;});
```

Notes:
dans le deuxième cas, les parenthèse représentent une expression JS et permettent à l'interpréteur de ne pas s'emmêler les pinceaux pour savoir qu'on retourne un objet
dans le deuxième cas, les parenthèses représentent une expression JS et permettent à l'interpréteur de ne pas s'emmêler les pinceaux pour savoir qu'on retourne un objet

##==##

Expand Down

0 comments on commit 2857578

Please sign in to comment.