我有一个使用小型化 javascript 文件 J1 的 XSL 模板。可以假设 J1 不可能被追踪和逆向工程。
我遇到的问题是 J1 有一个稍微更新的版本(称为 J1a),我有兴趣将 J1 用于代码的某些部分,将 J1a 用于同一模板中代码的其他部分。显然,由于重复的类和函数,将两者包含在同一个文件中会出现问题。我尝试使用以下代码将 J1 或 J1a 包装到伪命名空间(Javascript 不支持命名空间或模块)中,但无济于事:
function mynamespace() {
this.container = {
// insert monstrous javascript blob
}
} // which then is expected to do sth like mynamespace.Container.SomeFunction()
我还尝试了通过手动重命名大量名称(这很容易出错)来进行肮脏的重构,但是这两种方法都不起作用。
在写这篇文章的过程中,我想到了第三种方法,即在 J1 中添加一个函数 X(),在 J1a 中添加一个函数 Y(),然后将我的任务委托给那些应该解决问题的包装函数因为 J1 和 J1a 不相互导入。但是,我没有对此进行测试,也不是经验丰富的 JavaScript 编写者。
编辑:
因为我真正需要的 J1 和 J1a 如下:
MyObject.SomeStaticMethod();
MyObject obj = new MyObject(args);
obj.SomeInstanceMethod();
那么也许我可以这样做:
function X(var args) {
MyObject.SomeStaticMethod();
MyObject obj = new MyObject(args);
obj.SomeInstanceMethod();
}
function Y(var args) {
MyObject.SomeStaticMethod();
MyObject obj = new MyObject(args);
obj.SomeInstanceMethod();
}
并将 X 添加到 J1 并将 Y 添加到 J1a 然后在 XSL 模板中选择性地调用 X() 和 Y() ?
编辑 2:事实证明,巨大的小型化 javascript blob 不包含传统的全局变量,而是一些同样糟糕的东西 - 与 windows 对象绑定的变量。
话虽如此,有没有办法以某种方式拆分 HTML 的呈现,以便一部分在全局范围内只有一个副本,而另一部分在全局范围内有另一个副本?我听说JSP 有一些“平铺方法”。框架也是一种可能,尽管我听说使用它们有很多问题。