object
ΠΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΉ ΡΠΈΠΏ ΠΌΠ°ΡΠΈΠ½ΠΎΠΏΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° object
.
API ΡΠ΄ΡΠ° JavaScript ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° object
:
Object.getPrototypeOf
Object.getOwnPropertyDescriptor
Object.create
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π² ΠΌΠ°ΡΠΈΠ½ΠΎΠΏΠΈΡΠ½ΠΎΠΌ ΡΠ΅ΠΊΡΡΠ΅ Π½Π΅Ρ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ Π΄ΡΡΠ³ΠΈΡ
ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ
ΡΠΈΠΏΠΎΠ² ( string
, number
ΠΈ Ρ. Π.).
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Object.create('string')
- Π²ΠΏΠΎΠ»Π½Π΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΌΠ°ΡΠΈΠ½ΠΎΠΏΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° object
ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΠΌΠ΅ΡΡΠ΅ΠΉ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅.
Π’ΠΈΠΏ object
ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ΅Π½ {}
Π·Π° Π²ΡΡΠ΅ΡΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ:
object
object
{}
ΠΈ any
ΠΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΎΠ³Π»Π°ΡΡΠ΅ΡΡΡ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ javascript, ΡΠΈΠΏ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ typeof value === 'object'
ΠΏΠ»ΡΡ undefined
.
ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π²Π²Π΅ΡΡΠΈ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΏ Π·Π°ΡΠΈΡΡ Π΄Π»Ρ object
: typeof value === 'object'
.
ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ Object
: Object(value) === value
.
ΠΡΠ»ΠΎ Π±Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ API, ΠΊΡΠΎΠΌΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Object.
ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡ ΡΡΠΎΠ³ΠΎ Π²ΡΠΈΠ³ΡΠ°ΡΡ.
Π api ΡΠ΄ΡΠ° javascript, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Object
ΠΎΡ ΡΡΠΎΠ³ΠΎ Π²ΡΠΈΠ³ΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ es6 (WeakMap, Proxy ΠΈ Ρ. Π.).
ΠΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡ Π»ΡΡΡΡΡ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ, ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ React, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ setState, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ»ΠΈ null
, ImmutableJS, Mori ΠΈ Ρ.Π΄.
ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ: ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π»ΡΠ±ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ
ΠΠ±ΡΡΠΆΠ΄Π°Π΅ΡΡΡ Π½Π° ΡΠΎΠ±ΡΠ°Π½ΠΈΠΈ ΠΏΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΡΠ΅ ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ», Π½ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΎΡΠΈΠ±ΠΎΠΊ / ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ. ΠΠΎ ΡΡΡΠΈ, Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² API, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π°ΠΌΠΈ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ΅Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ Β«ΡΠΊΡΠΏΠ΅ΡΡΠ½ΡΠΌΠΈΒ» API (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠΊΡΠΈ)
ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΠΊΠΎΡΠ΅Π΅ ΠΊΠ°ΠΊ ΡΡΡΠ»ΠΊΠ°, ΡΠ΅ΠΌ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ: wink:
interface String { _primitiveBrand?: string; }
interface Boolean { _primitiveBrand?: boolean; }
interface Number { _primitiveBrand?: number; }
interface ObjectOnly { _primitiveBrand?: void; }
function fn(x: ObjectOnly) { }
// Error
fn(43);
// Error
fn('foo');
// OK
fn({});
// OK
fn(window);
+1 ΠΊ ΡΡΠΎΠΌΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ. Π― Π±Ρ Π½Π΅ ΡΡΠ°Π» ΡΡΠΈΡΠ°ΡΡ WeakMap
"ΡΠΊΡΠΏΠ΅ΡΡΠ½ΡΠΌ" API, Π½ΠΎ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π΅Π»Π°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ, ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π² TypeScript, ΡΡΠΎΠ±Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅.
ΠΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π²Π²ΠΎΠ΄Π° Β«ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²Β», Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ, Π½ΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ ΡΠΈΠΏΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ.
Object.observe
ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎΠΉ ΡΠ΅Π»ΠΈ: http://arv.github.io/ecmascript-object-observe/#Object.observe
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ±ΠΈΠ²Π°Π΅Ρ Ρ ΡΠΎΠ»ΠΊΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² Π½Π΅ΠΌ ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ ΡΠ»ΠΎΠ²ΠΎ Β«ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΉΒ». Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π½Π°Π·Π²Π°ΡΡ _ "Π’ΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ECMAScript" _ ΠΈΠ»ΠΈ _ "Π’ΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ" _. ΠΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°Π·Π½Π°ΡΠ΅Π½ ΠΈΠ· ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ, ΠΊΡΠΎΠΌΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ
ΡΠΈΠΏΠΎΠ² (Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΈΠΏ undefined
ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ), ΡΠΈΠΏΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ². ΠΡΠΈΡΠ΅ΡΠΈΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΊΠΎΠ½Π½ΡΠΌ ΡΠΈΠΏΠΎΠΌ object
Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΠΌΠ΅ΡΠ°Ρ
ΠΏΡΠ΅Π΄ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΠΈ:
let isObject (x) => typeof x === "object";
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ MDN , ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ typeof
:
ΠΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ : "Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ"
Null : Β«ΠΎΠ±ΡΠ΅ΠΊΡΒ» (ΡΠΌ. ΠΠΈΠΆΠ΅)
ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ : Β«Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅Β»
Π§ΠΈΡΠ»ΠΎ : Β«ΡΠΈΡΠ»ΠΎΒ»
Π‘ΡΡΠΎΠΊΠ° : Β«ΡΡΡΠΎΠΊΠ°Β»
Π‘ΠΈΠΌΠ²ΠΎΠ» (Π½ΠΎΠ²ΠΎΠ΅ Π² ECMAScript 2015) : Β«ΡΠΈΠΌΠ²ΠΎΠ»Β»
Π₯ΠΎΡΡ-ΠΎΠ±ΡΠ΅ΠΊΡ (ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΡΠ΅Π΄ΠΎΠΉ JS) : Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ (ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ [[Call]] Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ
ECMA-262) : Β«ΡΡΠ½ΠΊΡΠΈΡΒ»
ΠΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ : Β«ΠΎΠ±ΡΠ΅ΠΊΡΒ»
ΠΠ΅Π· ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠΎΡΠ½ΡΠΉ ΡΠΈΠΏ Π΄Π»Ρ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎΠΉ Π·Π°ΡΠΈΡΡ, Π΄Π°ΠΆΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π·Π°ΡΠΈΡΡ. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ Π»ΡΠ±ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΈΠΊΠ»Ρ for in
ΠΈ Π²ΡΠ·ΠΎΠ²Ρ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ° Object
, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠΈΡ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ T extends object
Π° Π·Π°ΡΠ΅ΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΏΡΠΎΡΠΎΡΠΈΠΏ.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ»ΡΡΠ°ΡΡ
Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΠΈΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠ³ Π±Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ°Π» Π±Ρ ΠΈΡ
ΠΈ Π½Π°Π·Π²Π°Π» _ Β«Π½Π΅ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Β» _. Π§Π°ΡΡΠΈΡΠ½ΡΠΌ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ object | Function
Ρ
ΠΎΡΡ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠΎΡΡΠ΅Π±ΡΡΡΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π°ΡΠΈΡΡ.
ΠΡΠΈΠ½ΡΡΠΈΠ΅ PR. ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΠ±ΡΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°; ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π»ΠΎΠΌΠ½ΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠΌ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ, ΠΊΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Ρ
ΡΠ°Π±Ρ, ΡΡΠΎΠ±Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ interface object { ... }
. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌ Π²ΡΡΠ΅.
ΠΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π½Π°ΠΌ Π²ΡΠ΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π³Π΄Π΅ Π±ΡΠ» @fdecampredon !
@RyanCavanaugh Π‘ΠΌΠ΅Π½Π° Π³ΠΎΡΠΎΠ΄Π° ΡΠ°Π±ΠΎΡΡ, ΠΈ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π΅ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΠΈΠ½ΠΎΠΏΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΌΠΎΠ΅ΠΉ Π½ΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅: D
ΠΡΠ»ΠΈΡΠ½ΠΎ. Π― Ρ ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΡΠΈΠΏ Π² TS1.8.
ΠΡΠ΅ Ρ
ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΠΈΠΏΠ° object
. ΠΠ΄Π½Π°ΠΊΠΎ Ρ ΡΠΎΠΌΠ½Π΅Π²Π°ΡΡΡ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ ΠΎΠ½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ typeof value === 'object'
, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡΠΉ ΡΠΈΠΏ object
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡΠ°ΠΆΠ°ΡΡ ΡΠΈΠΏ ΡΠ·ΡΠΊΠ° Object, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ° ΡΡΠΎ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΡΠΈΠ½:
Object
.Π― Π²ΠΎΠ·ΡΠΌΡ ΠΈΡ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ.
API, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ WeakMap
ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΈΠΏ ΡΠ·ΡΠΊΠ° Object, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. Π‘Π»Π΅Π΄ΡΡΡΠ΅Π΅ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ:
function theAnswer() {}
let map = new WeakMap();
map.set(theAnswer, 42);
console.log(map.get(theAnswer)); // 42
ΠΡΠΎ Π²Π΅ΡΠ½ΠΎ ΠΊΠ°ΠΊ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ API, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ API. ΠΡΠ»ΠΈ Ρ ΠΎΠΆΠΈΠ΄Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΌΠ½Π΅ ΠΎΠ±ΡΡΠ½ΠΎ Π½ΡΠΆΠ΅Π½ ΠΏΡΠΎΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΠ²ΠΎΠΉΡΡΠ². Π€ΡΠ½ΠΊΡΠΈΠΈ - ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠ΅ Π½Π°Π±ΠΎΡΡ ΡΠ²ΠΎΠΉΡΡΠ².
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Function
ΡΠ°ΡΡΠΈΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Object
, ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π² Object
Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
class DeepThought {
static getAnswer() {
return 42;
}
}
let computer = Object.create(DeepThought);
console.log(computer.getAnswer()); // 42
console.log(Object.getPrototypeOf(computer)); // [Function: DeepThought]
Π₯ΠΎΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π³Π»ΡΠΏ, ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ API, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Object
ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠΎΡΡΠΎΠΌΡ Ρ Π±Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ», ΡΡΠΎΠ±Ρ ΡΠΈΠΏ object
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π» ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΈΠΏΡ ΡΠ·ΡΠΊΠ° Object (Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ½ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ null
, Π½ΠΎ Π² TypeScript Π½Π΅Ρ Π·Π°ΡΠΈΡΡ ΠΎΡ null
Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅).
function isObject(value) {
return typeof value === 'object' || typeof value === 'function';
}
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Deep Map, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΏΠ°ΡΡ ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΏΠΎ ΠΏΡΡΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ½ ΡΠ°Π·Π»ΠΈΡΠ°Π΅Ρ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ ΠΈ Π½Π΅ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ ΡΠΈΠΏΡ. ΠΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ NonPrimitive
ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
interface NonPrimitive {
[key: string]: any;
[index: number]: any;
}
export class DeepMap {
// ...
private mapObject(obj: NonPrimitive): NonPrimitive { /* ... */ }
}
ΠΡΠΎ Π½Π΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½Π΅ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ NonPrimitive
. ΠΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Ρ ΠΌΠΎΠ³ ΠΏΡΠΎΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ:
export class DeepMap {
// ...
private mapObject(obj: object): object { /* ... */ }
}
ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ» Π²ΡΡΠ΅, ΠΌΠ½Π΅ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ obj
ΠΈΠ»ΠΈ Π½Π΅Ρ. ΠΠ°ΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ Object
_language_, Ρ. Π. ΠΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½Π°Π±ΠΎΡ ΡΠ²ΠΎΠΉΡΡΠ², ΠΏΠ°ΡΡ ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ
Ρ ΠΌΠΎΠ³Ρ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ.
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ object
s. Π¦Π΅Π»Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ.
Π₯ΠΎΡΠΎΡΠΎ, Ρ ΠΏΠΎΠ΄ΡΠΌΠ°Π», ΡΡΠΎ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±ΡΡΡ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ. Π― ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ΄ΡΠΌΠ°Π», ΡΡΠΎ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Ρ ΡΡΠΎ-ΡΠΎ ΡΠΏΡΡΡΠΈΠ» Π²ΠΎ Π²ΡΠ΅Ρ
ΡΡΠΈΡ
ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ°Ρ
ΠΎ typeof value === 'object'
.
ΡΠ°Π·ΡΠ΅ΡΠΈΡ Π»ΠΈ ΡΡΠΎΡ ΡΠΈΠΏ object
ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, any
)? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
const foo: object = {};
foo.bar = 'baz';
ΠΠ΅Ρ
Π ΡΠ΅ΠΌ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ
export class DeepMap {
// ...
private mapObject(obj: object): object { /* ... */ }
}
ΠΈ
export class DeepMap {
// ...
private mapObject(obj: Object): Object { /* ... */ }
}
? (ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ object
vs Object
). ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Function
ΡΠ°ΡΡΠΈΡΡΠ΅ΡΡΡ ΠΎΡ Object
, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΡ ΡΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΎΠ³ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ?
@trusktr ΠΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΡΠΎΠΌΠ΅ null
ΠΈ undefined
, ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡΡΡ ΡΠΈΠΏΡ Object
; ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Object
Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΡΡΠΎΠΊΡ, ΡΠΈΡΠ»ΠΎ, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ». object
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ; ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΡΡΠΎΠΊΠΈ ΠΈ Ρ. Π΄. Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π’ΠΈΠΏ object
ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΡΠ°ΠΌ, Π³Π΄Π΅ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ Π½Π΅ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½ΠΎ Π³Π΄Π΅ Π½Π°ΠΌ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ, ΠΊΠ°ΠΊΠΎΠ²Ρ Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
+1 ΠΊ ΡΡΠΎΠΌΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ. Π― Π±Ρ Π½Π΅ ΡΡΠ°Π» ΡΡΠΈΡΠ°ΡΡ
WeakMap
"ΡΠΊΡΠΏΠ΅ΡΡΠ½ΡΠΌ" API, Π½ΠΎ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π΅Π»Π°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ, ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π² TypeScript, ΡΡΠΎΠ±Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅.ΠΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π²Π²ΠΎΠ΄Π° Β«ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²Β», Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ, Π½ΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ ΡΠΈΠΏΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ.