【问题标题】:Dynamic property names within object对象内的动态属性名称
【发布时间】:2015-01-18 19:13:27
【问题描述】:

我最初的目的是创建具有动态名称的变量,以避免重复声明var randName = document.createElement("div");。 所以,当时我只是在学习 JS 对象,我想我可以做这样的事情:

var createMe = function(){},
elemsArray = ['a', 'b', 'c', 'd', 'e'],
numbersArray = ['1', '2', '3', '4', '5'],
togetherArray = elemsArray.concat(numbersArray),
i;
for(i = 0; i < togetherArray.length; i++)
{
    createMe.prototype[togetherArray[i]] = document.createElement("div");
    createMe.prototype[togetherArray[i]].setAttribute("id", togetherArray[i]); 
}
var awesomeObject = new createMe;

所以现在,我可以通过 awesomeObject.body 引用 HTML 元素,例如,操作它们,将它们插入 DOM 等等... 有了这个,我节省了一堆代码,它可以工作,并且可以满足我的需求,但是,我想知道我正在做的事情是否没有违反任何规则,速度很慢,或者是最好的方法。任何帮助表示赞赏。谢谢。

【问题讨论】:

  • 这没什么问题。
  • 感谢您的评论。我想知道这是不是唯一的方法?或者也许在对象内部有一个函数,它将数组作为输入并添加属性?
  • 嗯,有各种各样的方法可以动态创建属性。哪个“更好”或“更差”取决于您要解决的问题。
  • 好的,谢谢。我想这个问题有点毫无意义……我应该让它保持开放吗?

标签: javascript arrays object dynamic properties


【解决方案1】:

如果您只是在寻找有关实现目标的更简单方法的建议,我可能会建议您:

var createMe = function(ids) {
    elems = {};
    ids.forEach(function(id) {
        elems[id] = '<div id="'+id+'"></div>';
    }
    return elems;
}
var awesomeObject = createMe(['a','b','c','d','e'].concat([1,2,3,4,5]));

当然,这会将元素作为字符串返回。我发现在创建节点时使用 HTML 字符串通常更容易,只使用 DOM API 来更改现有节点。通过insertAdjacentHTML 将字符串节点添加到页面是有效的,如果您希望将此字符串转换为某些步骤的介绍节点,$.parseHTML 以及完成相同操作的辅助函数是可用的。

【讨论】:

    猜你喜欢
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    相关资源
    最近更新 更多