Ответ 1
Итак, для кого-то интересно, хорошее место, чтобы найти ответ здесь: https://github.com/jashkenas/underscore/search?q=extendOwn&type=Issues&utf8=%E2%9C%93
Обновление
Для всех, кто интересуется, ответ заключается в том, что extendOwn
является синонимом Object.assign
, при этом реализация будет немного отличаться. Underscorejs просто добавляет альтернативу ему. Вместо того, чтобы переопределять assign
с новой реализацией в Underscorejs и вызывать ее _.assign
, они вызывают ее _.extendOwn
(с _.assign
является псевдонимом _.extendOwn
).
Причина этого соглашения об именах понятна, но imho немного запутанна. Вы видите, Object.assign
является официальным названием ES6 для метода/логики, которые мы знаем как "расширяемые" (называемые такими инструментами, как jQuery и Underscore).
Решение команды Underscore заключалось в том, что они решили вызвать основной/родительский метод extendOwn
для соблюдения своих собственных внутренних стандартов, Именование основного метода _.assign
будет (интуитивно понятным для команды Underscore), он смущает то, что делает "расширение". Вызывая его extendOwn
, они говорят, что этот метод делает то же самое, что и "расширяться", но основан на реализации ES6 этой функции, известной как "присваивать".
По существу - то, что у них было здесь, было парадоксальным, и им нужно было принять решение. Либо они придерживаются соглашения, которое мы знаем как "расширяем", либо разрешаем "назначать" - это просто противоречит этому оригинальному имени (которое также может вызвать у людей вопрос, почему они все равно будут называть другой метод "расширять", а не assignSomethinghere
).
Короче говоря - extendOwn
- это версия поддерева ES6 Object.assign
. Они просто назвали его extendOwn
, чтобы поддерживать его в соответствии с одним и тем же соглашением об именах, которое называется extend.