Uglify нарушая прогрессивное создание вложенных объектов
Я постепенно создаю вложенные объекты. Исходный код работает, а код Uglified - нет.
Рабочий оригинальный код
function(type, id, fieldName) {
if (!this.model.proposed_changes)
this.model.proposed_changes = {};
if (!this.model.proposed_changes[type])
this.model.proposed_changes[type] = {};
if (!this.model.proposed_changes[type][id])
this.model.proposed_changes[type][id] = {};
if (fieldName) {
this.model.proposed_changes[type][id][fieldName] = this.model.proposed_changes[type][id][fieldName] || {};
}
}
Uglified Code (добавлены новые строки для удобства чтения)
function(e, i, n) {
this.model.proposed_changes || (this.model.proposed_changes = {}),
this.model.proposed_changes[e] || (this.model.proposed_changes[e] = {}),
this.model.proposed_changes[e][i] || (this.model.proposed_changes[e][i] = {}),
n && (this.model.proposed_changes[e][i][n] = this.model.proposed_changes[e][i][n] || {})
}
Это Uglified функция ошибок, когда this.model.proposed_changes
является undefined
поговорка Cannot read property <ID passed in> of undefined
, Я не уверен, почему код Uglified не работает, но кажется, что назначения не выполняются последовательно, хотя они должны быть ( https://msdn.microsoft.com/en-us/library/9b37css7(v=vs.94).aspx)
Я использую gulp-uglify с другой конфигурацией, кроме сохранения тактов лицензий, хотя я пробовал это с mangle: false
без эффекта.
Есть ли способ заставить uglify гарантировать, что назначения выполняются по порядку, если предположить, что это проблема?
Фон
В моем примере я гарантирую, что this.model существует, но не то, что у него есть подобъект с именем Project_changes. Этот шаблон продолжается до тех пор, пока у меня не будет this.model.proposed_changes[type][id][fieldName]. Если есть лучший способ сделать это, мне, безусловно, будет интересно.
1 ответ
Производственный сервер неправильно инициализировал this.model.proposed_changes для '{}'
вместо {}
, Как только эта ошибка была исправлена, код работал как ожидалось.