有大量的javascript混淆网站可以解决这个问题,但是我不确定在使用OOP创建代码时该怎么做。
顺便说一句,我正在混淆以减小尺寸和可读性。我完全知道它根本不会严重保护任何东西。
例如:
<script>
$(document).ready(function() {
myFunction.init(); // init
});
</script>
file.js
var myFunction = function () {
return {
//main function to initiate the module
init: function () {
alert('whole bunch of other stuff in here');
}
}
}
如果我对file.js进行模糊处理,则myFunction.init()项将丢失给程序,因为它已被重命名为某种变量。
此外,一个额外的问题是,如果从不同的类或函数调用init中的函数,由于名称的变化,它仍然会丢失。
有什么想法吗?最佳做法?
答案 0 :(得分:0)
您要做的事情是众所周知的export
。一些混淆器将包含一个doc-block标签,你可以添加它来保护这样的名字。
也许,这个问题会有所帮助:What is the best way to export library method, when using Closure Compiler?
否则,您需要查看正在使用的优化器,以查看它们是否支持类似功能。如果没有,您将需要寻找不同的优化器。
答案 1 :(得分:0)
我刚刚编写了自己的面向对象的Javascript代码混淆器,我的结论是很难为任何人编写一个通用的,这可能解释了缺少公开可用的工具。为了让我的工作,我必须确保我的业务代码遵守一致的编码实践。如果您认真对待代码混淆,并且不愿意编写&#34;编译器质量&#34;混淆器(我在Perl写过我的并且从未使用过lex),这是我的建议:
最终结果是一个几乎难以理解的文件。我们使用一个脚本将它们全部批量化,因此混淆是自动化的,无痛苦的。我们还有一个替代脚本,它可以将文件打包相同,但如果我们需要解决问题,则不需要进行模糊处理。
以下是一些额外的建议: 1.确保您声明的每个对象都以大写字母开头,并且您声明的每个全局函数都不以大写字母开头。这样就可以区分对象和普通函数。 2.使用一致的前缀命名每个成员变量。在我的例子中,我用字母&#34; m&#34;开始所有成员变量。接着是大写字母。例如,使用this.mName而不是this.name。如果您与此实践一致,则可以使用非常简单的脚本安全地重命名成员变量的使用。
对不起,我们不是开源我们的面向对象的Javascript混淆器。我们没有足够的时间为它提供任何支持,所以我们不会公开发布它,但我已经从组织的角度给了你我们所做的事情的本质,所以我希望它有所帮助。