在Javascript中使用uglifiers,我们改变变量的名称。如果我们想保留名称,我们将它们声明为字符串
function(){
this.prop_A = 'Some property that will be minified';
this['prop_B'] = 'Some property whose name wont be minified';
};
在我的应用程序中,我将所有变量名称声明为字符串。所以我有一堆配置参数:
params: {'prop1': ..., 'prop2': ..., ...}
现在在JS方面,我复制/粘贴这些属性来配置我的对象,如:
//forEach key in params
this[key] = params[key]
这段代码在我的对象范围内创建所有这些变量。
然而
我想直接使用点表示法访问对象中的变量。例如:
MyObject.prototype.augmentProp = function(someValue){
this.prop1 = this.prop1 * someValue;
};
然而,在uglification之后,this.prop1
将被重命名为类似this.a
的内容,除非我在原型函数中明确地写this['prop1']
,否则我将无法访问它。这就是我想要避免的。
是否有任何策略让JS方使用点表示法声明变量,该点表示法仅从变量名称的字符串推断出来。就像我写了:
this['prop1'] = this.prop1 = params['prop1'];
此外,如果prop1
是像Number这样的基本类型,上面的代码片段将在范围上创建两个不同的prop1
变量。换句话说,在uglification之后,那段代码将导致:
{
prop1: 5,
a: 5 //suppose the uglified name of prop1 was 'a'
}
如何自动声明点标记变量?如何在不重复对象范围内的原始变量的情况下实现此目的?
你能提出策略或已知方法吗?