我想在ADVANCED_OPTIMIZATIONS
模式下使用Closure Compiler来缩小JavaScript。这是我目前正在尝试的模式:
var myClosure = (function () {
var NS = {};
NS.foo = 100;
var MyConstructor = function (aValue) {
this.aValue = aValue;
};
NS["MyConstructor"] = MyConstructor;
MyConstructor.prototype.setAValue = function (v) {
this.aValue = v;
};
NS["MyConstructor"].prototype["setAValue"] = MyConstructor.prototype.setAValue;
MyConstructor.prototype.readAValue = function () {
return this.aValue;
};
NS["MyConstructor"].prototype["readAValue"] = MyConstructor.prototype.readAValue;
return NS;
}());
window["myClosure"] = myClosure;
它工作正常,我可以用这个调用缩小的代码:
var obj = new myClosure.MyConstructor(10);
alert(obj.readAValue());
obj.setAValue(100);
alert(obj.readAValue());
要展示JSFiddle。
虽然上述方法有效,但编写此项目所需的所有getter和setter以便能够调用已编译的代码将非常麻烦。
我可以使用哪种模式可以避免使用getter / setter方法吗?
或者,如果没有,有没有办法让我判断是否重构代码以使ADVANCED_OPTIMIZATIONS
可调用它是值得的。 (我估计添加方法将在未编译代码的行数方面增加超过5%)另外,我目前有大约1,300个QUnit断言测试。要运行这些测试,将有近10,000个分配,必须从以下内容重写:
obj.ValueA = 100;
obj.ValueB = 200;
到
obj.SetValueA(100);
obj.SetValueB(200);
以测试缩小的代码。
因此,如果可能的话,肯定会采用不同的方法。
答案 0 :(得分:0)
@expose
就是为了这个目的而创建的。
/** @expose */
MyConstructor.prototype.aValue