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