Nello MDN page forObject.assign() l'esempio polyfill esegue il wrapping di tutte le origini e dei parametri di destinazione in Object()
prima di iterare sulle proprietà. (ad esempio Object(target)
, Object(source1)
, Object(source2)
...).Qual è lo scopo di `Object (target)` nel polyfill `Object.assign()`
Il testo indica anche che le proprietà aggiuntive vengono aggiunte direttamente al target prima di restituire il target. Tuttavia, il wrapping del target in Object()
ha come risultato un oggetto diverso dalle semplici proprietà di conversione. (ad esempio Object(target).newProp !== target.newProp
).
Tutti gli esempi forniti hanno oggetti come parametri su Object.assign()
. Il caso d'uso per i parametri di origine o di destinazione non oggetto non è quindi chiaro.
A) Qual è lo scopo del wrapping dei parametri in Object()
? (Ho l'impressione che lo Object.keys(x)
sia lo stesso di Object.keys(Object(x))
).
B) Quali sono i possibili casi di utilizzo per l'utilizzo di Object.assign()
con non oggetti, c'è? (Per esempio qualcosa come: Object.assign(1, 'b', [3], true, function(){})
)
'Oggetto (destinazione)' lancia la mira in un oggetto. Ad esempio: 'Object (" 1234 ")' lo trasmette a '[object String] {0:" 1 ", 1:" 2 ", 2:" 3 ", 3:" 4 ", lunghezza: 4}' – Mouser
Di solito è meglio leggere le specifiche insieme al polyfill, poiché spesso cercano di replicare il comportamento. Puoi vedere dal [* ed. 6 bozza *] (https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign), che ogni argomento è passato a * ToObject *. Poiché lo script nativo non può accedere ai metodi interni, chiamare 'Object (target)' e 'Object (source)' è un'approssimazione (sebbene non esattamente la stessa, specialmente per * null * e * undefined *). – RobG
@Mouser. Capisco cosa fa Object(). Quello che non capisco è perché mai fare qualcosa come Object.assign ([], 'a', 3, function() {}) – Hurelu