Uglify 缩小 `new Obj();` 是错误的

Uglify Is Minifying `new Obj();` Wrong

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

Gulp

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() 时我的代码中断了。

我该如何解决这个问题?

缩小器是正确的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()
    }
};

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

new ThirdPartyObject;new 的一个特例,当应用于不带参数的构造函数时,这是一个正确的陈述。

您的呼叫 obj.thirdPartyMethod() 可能由于其他原因而失败。您确定 obj 在调用 init 函数的范围内正确解析了吗?您需要 this. 还是参考 Site.Code