可以避免使用getter和setter的模式,并使用Closure ADVANCED_OPTIMIZATIONS缩小JavaScript吗?

时间:2014-11-16 15:26:39

标签: javascript google-closure-compiler

我想在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);

以测试缩小的代码。

因此,如果可能的话,肯定会采用不同的方法。

1 个答案:

答案 0 :(得分:0)

@expose就是为了这个目的而创建的。

/** @expose */
MyConstructor.prototype.aValue