2016-10-03 5 views
1

중첩 된 개체를 점차적으로 만들고 있습니다. 원래 코드는 작동하지만 코드가 아닙니다.누진 진행 중첩 된 개체 생성을 Uglify

작업 원본 코드

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 코드 (개행 문자는 가독성을 위해 추가)

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_changesundefined 인 경우 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의 존재를 보장하지만 아니에요는 proposed_changes라는 하위 개체가 있음. 이 패턴은 내가 this.model.proposed_changes [type] [id] [fieldName]을 가질 때까지 계속됩니다. 이렇게하는 것이 더 좋은 방법이라면, 나는 분명히 관심이있을 것입니다.

+1

명령은 항상 JS에서 순차적으로 실행됩니다. 그리고 uglified 코드는 원본과 똑같이 작동해야합니다. uglified 함수를 원래 값으로 대체하려고 시도 했습니까? 그것도 하나 실패, 또는하지 않습니까? '이 모델'은 존재한다는 보장이 있지만 실제로 확인 했습니까? – Thomas

+0

조언을 주셔서 감사합니다. 감사합니다. 백엔드가 this.model.proposed_changes를'{} '대신'{{}'로 잘못 초기화했습니다. – SethBoyd

답변

0

생산 백엔드가 {} 대신 this.model.proposed_changes를 '{}'으로 잘못 초기화했습니다. 이 버그가 수정되면 코드가 예상대로 작동합니다.