Javascript 使用UglifyJS(早午餐)压缩Object.prototype.functions

Javascript 使用UglifyJS(早午餐)压缩Object.prototype.functions,javascript,html,uglifyjs,brunch,Javascript,Html,Uglifyjs,Brunch,我最近从使用手写编译脚本和Google闭包编译器转向使用早午餐,在那里我或多或少地被迫使用UglifyJS 我有配置选项 uglify: mangle: toplevel: true eval: true functions: true compress: true 我的类使用原型风格的构建 即 然后(c在全局范围内,只调用一次) 添加toplevel:true配置选项会损坏汽车,但原型功能(即startEngine)都不会损坏 我不想改变我的类结构,但是我能

我最近从使用手写编译脚本和Google闭包编译器转向使用早午餐,在那里我或多或少地被迫使用UglifyJS

我有配置选项

uglify:
  mangle: 
    toplevel: true
    eval: true
    functions: true
  compress: true
我的类使用原型风格的构建

然后(c在全局范围内,只调用一次)

添加toplevel:true配置选项会损坏汽车,但原型功能(即startEngine)都不会损坏

我不想改变我的类结构,但是我能让UglifyJS破坏这些函数名吗


谢谢:)

丑八怪没有能力破坏对象属性。但是,通过切换到带变量的括号表示法,您可能能够更接近您所要查找的内容

function Car() { }

var startEngine = 'startEngine'; // could actually be any random string or number
Car.prototype[startEngine] = function() { }

var c = new Car();
car[startEngine]();
这取决于您的第一个代码段和第二个代码段都可以访问
startEngine
变量,因此根据您的项目结构,您可能必须以等效的方式重新声明变量,或者想出其他创造性的方法来跨范围保留其值


上的答案提供了更详细的解释。

是的,现在您可以。您只需要稍微修改一下代码。 看我的

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

var startEngine = 'startEngine'; // could actually be any random string or number
Car.prototype[startEngine] = function() { }

var c = new Car();
car[startEngine]();