From 4ca4740193cd3decfac40af604486aaac44a6b84 Mon Sep 17 00:00:00 2001 From: Xartok Date: Tue, 30 Jun 2020 18:13:57 +0200 Subject: [PATCH 1/4] feat(objects): add warning for Object.assign that is shallow --- .../02-Object.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/markdown/03-property-description-object-enhancements/02-Object.md b/docs/markdown/03-property-description-object-enhancements/02-Object.md index 024006c..eeb37d1 100644 --- a/docs/markdown/03-property-description-object-enhancements/02-Object.md +++ b/docs/markdown/03-property-description-object-enhancements/02-Object.md @@ -65,6 +65,31 @@ l'autre manière de copier un objet est le spread operator +# 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 +``` + +##==## + + + # Fonctions utilitaires sur Object - Nouvelles fonctions utilitaires values() et entries(), keys() déjà en ES5 From 43ee9fa046dac0967a12ebf8282d3b888bdb76d7 Mon Sep 17 00:00:00 2001 From: Xartok Date: Tue, 30 Jun 2020 18:23:21 +0200 Subject: [PATCH 2/4] feat(objects): add Object.freeze / preventExtensions / seal --- .../01-Property-descriptor.md | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/docs/markdown/03-property-description-object-enhancements/01-Property-descriptor.md b/docs/markdown/03-property-description-object-enhancements/01-Property-descriptor.md index 4f5e0d5..085ce1d 100644 --- a/docs/markdown/03-property-description-object-enhancements/01-Property-descriptor.md +++ b/docs/markdown/03-property-description-object-enhancements/01-Property-descriptor.md @@ -59,3 +59,50 @@ Object.defineProperty(sword, 'blade', { sword.blade; // steel ``` + +##==## + + + +# 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.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' } +``` + + +##==## + + + +# 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| From 62f4f9fa7b90dc90d222c67ae287885557304d09 Mon Sep 17 00:00:00 2001 From: Xartok Date: Thu, 2 Jul 2020 11:29:55 +0200 Subject: [PATCH 3/4] fix(arrow-functions): fix examples --- .../04-Arrow-function.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/markdown/03-property-description-object-enhancements/04-Arrow-function.md b/docs/markdown/03-property-description-object-enhancements/04-Arrow-function.md index 73dd703..c8b6cb8 100644 --- a/docs/markdown/03-property-description-object-enhancements/04-Arrow-function.md +++ b/docs/markdown/03-property-description-object-enhancements/04-Arrow-function.md @@ -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 ##==## From 151172d41084a6a0c1f763ae47dc6a23d1e5f2b2 Mon Sep 17 00:00:00 2001 From: Xartok Date: Mon, 27 Jul 2020 17:53:46 +0200 Subject: [PATCH 4/4] feat(objects): clarify Object.assign --- .../02-Object.md | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/docs/markdown/03-property-description-object-enhancements/02-Object.md b/docs/markdown/03-property-description-object-enhancements/02-Object.md index eeb37d1..dc41525 100644 --- a/docs/markdown/03-property-description-object-enhancements/02-Object.md +++ b/docs/markdown/03-property-description-object-enhancements/02-Object.md @@ -13,14 +13,14 @@
```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 }); @@ -36,19 +36,15 @@ Object.defineProperty(o2, 'g', {
```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 ```