对象内的动态属性名称

时间:2015-01-18 19:13:28

标签: javascript arrays object dynamic properties

我最初的目的是创建具有动态名称的变量,以避免重复声明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等等...... 有了这个,我保存了许多代码行,并且它可以工作,并且可以满足我的需求,但是,我想知道我做的事情是不是违反任何规则,是否很慢,或者是最好的方法。任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

如果您只是在寻找有关实现目标的简单方法的建议,我可以提出以下建议:

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向页面添加字符串节点是有效的,如果您希望转换此字符串intro节点的某些步骤$.parseHTML可用,以及帮助函数完成相同的操作。