0

我正在使用 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()

我怎样才能解决这个问题?

4

2 回答 2

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()
    }
};
于 2015-05-18T15:29:11.990 回答
0

Uglify 在这里是正确的。见new MyObject(); 与新的 MyObject;在 StackOverflow 上。

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

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

于 2015-05-18T15:29:23.803 回答