定义外部JS文件的执行上下文?

时间:2014-04-21 16:53:40

标签: javascript closures

我正在研究小型JS库,我希望能够在不同的项目中使用。

我的问题如下:我需要一些数据,这些数据是在另一个JS项目的几个文件中定义的,我不控制源代码。这些文件的结构如下:

(function() {
  var exportObj;
  exportObj = typeof exports !== "undefined" && exports !== null ? exports : this;

  exportObj.??? = ...;

}).call(this);

现在,我可以通过在全局范围内定义exports变量来防止全局命名空间污染。然后,我可以在外部文件加载后将其重命名为我想要的任何内容。

但是,如果我需要与另一个使用exportObj = typeof exports ...模式的脚本并行工作,这将无法正常工作,因为我也会从该脚本中捕获所有定义。

无论如何我可以定义用于执行我需要包含的外部JS文件的this的值吗?这样我就可以将定义重定向到我选择的变量,而不会影响真正在全局exports变量上的任何其他脚本。

1 个答案:

答案 0 :(得分:0)

有可能将这些文件的内容包装在完全相同的模式中,从而导致类似

的内容
(function () {

    (function() {
      var exportObj;
      exportObj = typeof exports !== "undefined" && exports !== null ? exports : this;

      exportObj.??? = ...;

    }).call(this);

}).call(yourNamespace);

如果您不控制源,您可以尝试通过服务器代理它并为您包装。您还可以尝试将脚本作为文本获取,将其包装在客户端中然后插入它。这两种听起来都很糟糕,但可能是解决问题的最简单方法,而不会过于干扰和聪明。