В файле MDN page forObject.assign() пример polyfill сначала обертывает все источники и целевые параметры в Object()
перед итерацией по свойствам. (то есть Object(target)
, Object(source1)
, Object(source2)
...).В чем цель `Object (target)` в `Object.assign()` polyfill
В тексте также упоминается, что дополнительные свойства добавляются непосредственно к цели перед возвратом цели. Однако обертка цели в Object()
приводит к объекту, который отличается от просто увеличивающих свойств. (то есть Object(target).newProp !== target.newProp
).
Все приведенные примеры имеют объекты как параметры для Object.assign()
. Поэтому прецедент для объектных источников или целевых параметров не ясен.
A) Какова цель упаковки параметров в Object()
? (У меня создается впечатление, что Object.keys(x)
такой же, как Object.keys(Object(x))
).
B) Какие возможные варианты использования Object.assign()
с объектами не являются объектами? (Например, что-то вроде: Object.assign(1, 'b', [3], true, function(){})
)
'Объект (цель)' предает цель в объект. Например: 'Object (" 1234 ")' отличает это от [object String] {0: "1", 1: "2", 2: "3", 3: "4", length: 4} ' – Mouser
Обычно лучше всего читать спецификацию в сочетании с polyfill, поскольку они часто пытаются воспроизвести поведение. Вы можете видеть из [* ed. 6 draft *] (https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign), что каждый аргумент передается * ToObject *. Поскольку собственный скрипт не может получить доступ к внутренним методам, вызов 'Object (target)' и 'Object (source)' является приближением (хотя и не совсем то же, особенно для * null * и * undefined *). – RobG
@Mouser. Я понимаю, что делает Object(). Я не понимаю, почему вы когда-либо делали бы что-то вроде Object.assign ([], 'a', 3, function() {}) – Hurelu