2015-05-18 3 views
0

Я использую gulp и gulp-uglify, чтобы минимизировать код javascript.Uglify Is Minifying `new Obj();` Wrong

Глоток

var uglify= require('gulp-uglify'); 
gulp.task('javascript', function() { 
    return gulp.src('./scripts/*.js') 
    .pipe(uglify()) 
    .pipe(gulp.dest('./')); 
}); 

Оригинал Javascript

var Site = Site || {}; 
Site.Code = { 
    obj: new ThirdPartyObject(), 
    init: function() { 
     obj.thirdPartyMethod(); 
    } 
}; 

уменьшенная Javascript

var Site = Site || {}; 
Site.Code = {obj: new ThirdPartyObject,init: function() { 
    obj.thirdPartyMethod() 
}}; 

Minifie r удаляет круглые скобки для obj: new ThirdPartyObject, и поэтому мой код прерывается, когда я делаю вызов obj.thirPartyMethod().

Как это исправить?

+0

Если вы проверите свой код * unminified *, вы обнаружите, что он тоже не работает. –

ответ

6

Указатель правильности new X() и new X эквивалентны.

Ваш код, однако, неверен. Вот верная версия:

var Site = Site || {}; 
Site.Code = { 
    obj: new ThirdPartyObject(), 
    init: function() { 
     Site.Code.obj.thirdPartyMethod(); // <-- obj didn't exist 
     // this.obj.thirdPartyMethod(); <-- also works, because this will be Site.Code when invoking Site.Code.init() 
    } 
}; 
0

Uglify верен здесь. См. new MyObject(); vs new MyObject; о StackOverflow.

new ThirdPartyObject; является правильной инструкцией как особый случай new при применении к конструктору, который не принимает аргументов.

Ваш звонок obj.thirdPartyMethod(), вероятно, не подходит по другим причинам. Вы уверены, что obj правильно разрешен в области, в которой вызывается функция init? Вам нужен this., или ссылка на Site.Code?

Смежные вопросы