我正在逐步创建嵌套对象。原始代码可以工作,但修改后的代码不能。
工作原始代码
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] || {};
}
}
修改后的代码(为了可读性增加了换行符)
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] || {})
}
当this.model.proposed_changes
为undefined
时,此丑化函数出错,表示Cannot read property <ID passed in> of undefined
。我不知道为什么丑陋的代码不工作,但它似乎好像赋值不按顺序运行,即使他们应该(https://msdn.microsoft.com/en-us/library/9b37css7(v=vs.94).aspx)
我将gulp-uglify与其他配置一起使用,而不是保留许可证,尽管我已经尝试了mangle: false
,但没有效果。
是否有一些方法可以强制丑化以确保赋值按顺序发生,假设这是问题所在?
在我的例子中,我可以保证。模型存在,但它没有一个名为proposd_changes的子对象。这种模式一直持续到我有This .model.proposed_changes[type][id][fieldName]。如果有更好的方法,我当然会感兴趣。
生产后端初始化this.model错误。建议更改'{}'
而不是{}
。一旦这个bug被修复,代码就能正常工作了。