防止uglifyjs重命名某些功能

Par*_*ris 3 javascript uglifyjs

我有一个函数,其中包含一个构造函数.它创建一个新对象并返回它:

function car() {
   function Car() {}
   return new Car();
}
Run Code Online (Sandbox Code Playgroud)

因此,uglify将Car重命名为某个字母,当它返回时,它看起来像对象名称只是一些字母.例如,在chrome中,它会说对象的类型是"t".

有没有办法告诉uglify保留一些函数的名称?

Bil*_*ill 9

您需要使用reserved-names参数:

--reserved-names “Car”
Run Code Online (Sandbox Code Playgroud)


Jua*_*des 6

即使你遵循比尔的建议,你的方法仍然存在问题.

car().constructor !== car().constructor
Run Code Online (Sandbox Code Playgroud)

人们会期望这些是平等的

我会改变你创建构造函数并给它一个Factory构造函数的方法

/** @private */
function Car() {
   ...
}

Car.create = function() {
    return new Car();
}
Run Code Online (Sandbox Code Playgroud)

或者以下(模块模式),结合Bill的方法.然后你不会每次都返回一个具有不同原型的对象

var car  = (function() {
   function Car() {...}
   return function() {
       return new Car();
   }
})();

// car().constructor === car().constructor // true
Run Code Online (Sandbox Code Playgroud)

  • @Parris因为这样,每次调用`car()`时都不会创建新的构造函数`Car`.self调用函数将构造函数放入闭包中,每次都使用相同的闭包.你的例子每次都重新声明`function Car(){}` (3认同)