Javascript 防止uglifyjs重命名某些函数

Javascript 防止uglifyjs重命名某些函数,javascript,uglifyjs,Javascript,Uglifyjs,我有一个函数,里面有一个构造函数。它创建一个新对象并返回: function car() { function Car() {} return new Car(); } 结果,uglify将Car重命名为某个字母,当返回时,对象名称看起来只是某个字母。例如,在chrome中,它会说对象的类型是“t” 有没有办法告诉uglify保留某个函数的名称?您需要使用保留名称参数: --reserved-names “Car” 即使你听从比尔的建议,你的方法还是有问题 car().const

我有一个函数,里面有一个构造函数。它创建一个新对象并返回:

function car() {
   function Car() {}
   return new Car();
}
结果,uglify将Car重命名为某个字母,当返回时,对象名称看起来只是某个字母。例如,在chrome中,它会说对象的类型是“t”


有没有办法告诉uglify保留某个函数的名称?

您需要使用
保留名称
参数:

--reserved-names “Car”

即使你听从比尔的建议,你的方法还是有问题

car().constructor !== car().constructor
人们会期望这些是平等的

我将改变您创建构造函数并为其提供工厂构造函数的方法

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

Car.create = function() {
    return new Car();
}
或以下(模块模式),结合比尔的方法。然后,您不会每次都返回一个具有不同原型的对象

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

// car().constructor === car().constructor // true

为什么这很重要?只是为了调试?无论如何,你不应该使用丑陋的版本进行调试。我认为它比其他任何东西更具语义。如果您向人们公开库,他们应该知道他们使用的对象类型。知道构造函数的名称是
Car
,这有什么帮助?看起来您正试图保持它的私有性,因此库的用户不需要知道构造函数的名称。如果它是一个公共对象,就没有必要在函数中声明它。我相信有人会根据对象的名称来检查类型:这在某些情况下可能有用?六羟甲基三聚氰胺六甲醚。。也许不是?我想我正在这样做,除了在末尾额外返回一个函数:,为什么返回函数(){return new Car();}为什么不直接返回一辆新车?@Parris因为这样,每次调用
Car()
时都不会创建一个新的构造函数
Car
。自调用函数将构造函数放入闭包中,每次都使用相同的闭包。您的示例每次都重新声明
函数Car(){}