如何在不修改的情况下封装(和命名空间)现有的大型javascript文件? 摘要

如何在不修改的情况下封装(和命名空间)现有的大型javascript文件? 摘要,javascript,wsdl,cxf,Javascript,Wsdl,Cxf,我有一个巨大的JS文件,它有老式的函数和变量定义:它将所有内容都放在全局范围内。我希望能够在“名称空间”中“导入”该文件,以便全局范围保持整洁 细节 “大文件”是由Apache CXF中的WSDL2JS工具生成的Web服务客户端。它将数百个函数和变量置于全局范围内,其中有一个小范围。我希望继续使用该工具,但将生成的JS保留在某种名称空间或单独的作用域中。是否可以使用一些工具或最少的人工干预 样品 这是来自WSDL2JS的代码,包装在自调用函数中,实际上不起作用。 可以在上进行测试和编辑 附带问题

我有一个巨大的JS文件,它有老式的函数和变量定义:它将所有内容都放在全局范围内。我希望能够在“名称空间”中“导入”该文件,以便全局范围保持整洁

细节 “大文件”是由Apache CXF中的WSDL2JS工具生成的Web服务客户端。它将数百个函数和变量置于全局范围内,其中有一个小范围。我希望继续使用该工具,但将生成的JS保留在某种名称空间或单独的作用域中。是否可以使用一些工具或最少的人工干预

样品 这是来自WSDL2JS的代码,包装在自调用函数中,实际上不起作用。 可以在上进行测试和编辑

附带问题 有没有更好的工具来使用JS中基于wsdl的Web服务(在浏览器中)?是否有来自ApacheCXF的WSDL2JS的替代方案


提前感谢。

您需要从外部调用其功能吗?如果不是,则只需将现有代码封装在:


并在每个全局声明前面添加“var”。

否。您必须修改文件本身,尽管它可以自动完成。基本上,只需将其包装在一个IEFE中,并为那些您仍然希望是全局变量的变量添加一些导出代码。@Bergi,问题是所有这些函数和变量都是相互依赖的,所以只公开一两个是没有用的。有没有办法用一个单独的工具把所有这些乱七八糟的东西放到一个名称空间中?修改JS文件是可以的,除非它是自动的。你不需要“名称空间”(在JavaScript中表示对对象的点访问),你只需要一个范围(我的解决方案提供给你)。@Bergi你的解决方案在这里有什么帮助?@Rozboris:问题不在于iefe,而是你的代码:使用
(new testModule.priv)。有些东西
。不过,您的继承还是有缺陷的。我当然调用了一些函数。这些函数调用该文件中的其他“内部”函数,因此我必须公开整个过程。然后使用显示模块模式只公开需要从外部调用的函数。一个简单的实现示例:多亏了您和@Bergi,我成功地以这种方式实现了它。非常感谢。
var testModule = (function(){
  //here starts the generated code that I don't want to touch
  function priv(){
    console.log('called private function');
  }

  function proto(){
    this.something = 'hello';
  }

  priv.prototype = new proto;
  //here ends the generated code that I don't want to touch

  return {
    priv: priv
  }

})();

testModule.priv.something; //undefined
(function(){
    //code goes here
}());