Uglify正在缩小`新的Obj();'错了

时间:2015-05-18 15:22:55

标签: javascript gulp gulp-uglify

我正在使用gulp和gulp-uglify来缩小我的javascript代码。

咕嘟咕嘟

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()
}};

缩小器正在移除obj: new ThirdPartyObject的括号,因此当我拨打电话obj.thirPartyMethod()时,我的代码会中断。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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()
    }
};

答案 1 :(得分:0)

Uglify在这里是正确的。请参阅StackOverflow上的new MyObject(); vs new MyObject;

当应用于不带参数的构造函数时,

new ThirdPartyObject;new的特例。

您的电话obj.thirdPartyMethod()可能因其他原因而失败。您确定在调用obj函数的范围内正确解析init吗?您需要this.,还是Site.Code的引用?