动态加载多个JS脚本,其中脚本的描述完全相同

时间:2009-01-29 19:06:04

标签: javascript oop

我有一个有趣的问题,我不确定如何最好地解决。

我有JS脚本,其中包含以下内容:

   var obj = new namespace.MyObjectName("key", [12, 11, 22, 33, 454, 552, 222], [33, 22, 33, 11, 22, 222, 111]);

   namespace.MyObjectName = function(keyName, data1, data2) {
    this.myData1 = data1;
    this.myData2 = data2;

    this.holder = [
        [keyName, [myData1, myData2]]
    ];
   };

   namespace.MyObjectName.prototype.DoSomething = function(arg1, argArray) {
    this.globalVar = [
      "Display " + arg1 + " into string using " + argArray[0] + "<br> for visual purposes",

      "Display " + arg1 + " into string using " + argArray[2] + "<br> for visual purposes"
    ];
   };

自动化正在创建这些JS文件的副本,每个文件包含与上面相同的对象声明,文件名的行如下:

  • file1.js
  • file2.js

每个文件的区别在于 DoSomething 方法名称内容总是不同/生成,传递给构造函数的数组值也是如此。

上述所有内容在JS独立使用期间都很好。

<小时/> 我现在要做的是让一个HTML页面动态加载一个或多个这些文件(以便稍后通过编写代码进行比较),我可能会使用this answer,但是因为每个脚本声明了以同样的方式对象,当我加载多个副本时,我面临着弄清楚如何阻止它们相互踩踏。

以下是我正在考虑的一些选项:

  1. 以这样的方式编写JS,即每个脚本文件对象都是唯一的命名空间,但是在加载时会以某种方式在HTML中使用一段JS代码进行注册,该代码保存在所有对象引用上
    • 以这样一种方式编写HTML,即每个脚本都以隔离的方式加载(就我所知,在JS中没有办法做到这一点,但我可能错了)
    • 其他一些不为人知道的方法
  2. 我目前的偏见是针对(1)但是我把整个事情都放在讨论中,因为这种方法可能会有固有的问题,或者其他方法可能会被证明是优越的。

2 个答案:

答案 0 :(得分:1)

关于(2),可以使用iframe在沙箱中运行javascript,例如检查Dean Edwards的Sandbox.eval()Slickspeed Selectors Test

答案 1 :(得分:0)

我真的不明白这个问题,但为了避免践踏命名空间,你可以做到:

var namespace = namespace || function() {}