0

所以我发现自己处于尴尬的境地,我在 main.js 中有一个函数,它需要一个填充在 second.js 中的数组......

简而言之,main.js 中的函数旨在可重用:

function chug()
{
    p1.innerHTML = st_a[0];
    p2.innerHTML = st_a[1];
    ...
}

现在,'st_a' 应该被解析为: st_ + ,在这种情况下,该变量是 'a'。作为 second.js 文件的想法将有多个数组(st_a、st_b 等),并且根据需要,相关数组将用于填充段落元素(p1、p2 等)

有任何想法吗?

4

2 回答 2

2

如果 st_[x] 是一个全局变量,您可以使用window['st_a']它来引用它。所以,你应该能够使用类似的东西:

function chug()
{
    var arrid = 'st_'+'a';
    p1.innerHTML = window[arrid][0];
    p2.innerHTML = window[arrid][1];
    //...
}

或使用函数来检索数组:

function getArr(id){
  return window['st_'+id];
}

second.js或者,您可以使用带有“get”方法的容器对象,例如:

var myArrays = {
  st_a: [],
  st_b: [],
  st_c: [],
  get: function(id){
    return this['st_'+id];
  }
  /* etc */
}

现在chug可能看起来像:

function chug()
{
    var arr = myArray.get('a');
    p1.innerHTML = arr[0];
    p2.innerHTML = arr[1];
    //...
}
于 2012-04-06T08:05:37.057 回答
0

使用全局变量是邪恶的。因为您可以覆盖另一个已经设置的内容,并且 javascript 不会告诉您您做了一些愚蠢的事情。

您有多种选择可以避免使用它们:

  • 使用单个对象来包含所有功能。此示例应向您展示如何执行此操作:

    var MYAPP = {} MYAPP.chug = function() { // 你的代码 } // 然后,在这个之后加载的任何其他文件中,你可以这样做: MYAPP.anotherFunction = function() {} // 甚至这个: MYAPP.chug()

这样,您只用一个变量污染了全局范围。

然后,为了解决您的问题,您可以根据您选择的解决方案执行以下操作:

// Let me borrow this code from kooiinc
MYAPP.myArrays = {
   st_a: [],
   st_b: [],
   st_c: [],
   get: function(id){
       return this['st_'+id];
   }
   /* etc */
}
MYAPP.chug = function() {
    var arr = this.myArrays.get('a') // 'this' refers to the MYAPP object in this case
    p1.innerHTML = arr[0]
    // ...
}
于 2012-04-06T08:36:52.490 回答