Javascript + Uglify - 将括号表示法转换为点符号的策略

时间:2015-11-05 12:06:30

标签: javascript uglifyjs

在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'
} 

如何自动声明点标记变量?如何在不重复对象范围内的原始变量的情况下实现此目的?

你能提出策略或已知方法吗?

0 个答案:

没有答案