我正在使用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()
时,我的代码会中断。
我该如何解决这个问题?
答案 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
的引用?