【问题标题】:create names for automatically created vars为自动创建的变量创建名称
【发布时间】:2013-10-14 17:45:56
【问题描述】:

在 JavaScript 中,我有一个 for sn-p 来创建新的输入元素

for(var g = 0; g < psi.length; g++) {
var newtextLink+(g+1)= document.createElement('input');
//continue with setting attributes
}

我想将单词 newtextLink 和 var g 放在一起,以便每次执行 for 时都有类似 newtextLink2 的内容...我该如何实现?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    这是你通常想要一个数组的地方:

    var newtextLinks = [];
    for(var g = 0; g < psi.length; g++)
    {
        newtextLinks[g] = document.createElement('input');
    }
    

    然后通过类似的索引变量(newtextLink[g]newtextLink[0] 等)使用它们。

    或者,可能有一些地方(可能不在此处)您确实需要名称。你可以用一个对象来做到这一点:

    var newtextLinks = {};
    for(var g = 0; g < psi.length; g++)
    {
        newtextLinks["name" + (g+1)] = document.createElement('input');
    }
    

    现在你有newtextLinks.name1newtextLinks.name2,等等。

    但为了这个目的,数组似乎是最好的。

    【讨论】:

      【解决方案2】:

      如果你坚持使用变量,你可以使用window对象:

      window['newtextLink' + (g+1)] = document.createElement('input');
      

      否则使用数组:

      var newTextLinks = [];
      
      ...
      
      newTextLinks[g] = document.createElement('input');
      

      【讨论】:

      • 你不能将它用于局部变量
      • 而且创建更多的全局变量通常不是一个好主意。 (哦,我看到你现在已经添加了数组选项......)
      • @T.J.Crowder 我现在意识到,刚接触数组的人通常会寻找这样的解决方案,我想我这个问题有点过于字面意思了。
      【解决方案3】:

      试试

      this['newtextLink' + (g + 1)] = ...;
      

      【讨论】:

      • 这会污染全局命名空间,或者污染其他对象。两者都不是一个好主意。
      【解决方案4】:
      function createVariables(){
        var newtextLink= [];
      
        for (var i = 0; i <= psi.length; ++i) {
            newtextLink[i] = document.createElement('input');
        }
      
        return newtextLink;
      }
      

      你有 newtextLink[0] ... newtextLink[n]

      您在这里有类似的问题: JavaScript: Dynamically Creating Variables for Loops

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-29
        • 2018-05-29
        • 1970-01-01
        • 1970-01-01
        • 2021-10-26
        • 2011-10-27
        相关资源
        最近更新 更多