Javascript 应该将DOM元素定义为变量吗?

Javascript 应该将DOM元素定义为变量吗?,javascript,Javascript,例如,在这个对象函数中,我将元素放在一个名为Text array的变量中。然后根据需要访问变量。但是,我可以根据需要直接访问表单,而不必使用变量。哪种方式是最佳实践?我还可以使用documentGetElementbyId作为第三种方法。我还看到了使用不带[]的点符号访问DOM。总共是4个。最好的方法是什么?如果是case specefic..那么对于下面的对象函数,最好的方法是什么 var Text = function( form_name ) { this.text_array

例如,在这个对象函数中,我将元素放在一个名为Text array的变量中。然后根据需要访问变量。但是,我可以根据需要直接访问表单,而不必使用变量。哪种方式是最佳实践?我还可以使用documentGetElementbyId作为第三种方法。我还看到了使用不带[]的点符号访问DOM。总共是4个。最好的方法是什么?如果是case specefic..那么对于下面的对象函数,最好的方法是什么

var Text = function( form_name ) 
{
    this.text_array = document.forms[form_name].elements;
};

Text.prototype.patterns = 
{
    prefix_url:     /^http:\/\//,
    url:            /^.{1,2048}$/,
    tweet:          /^.{1,40}$/, 
    title:          /^.{1,32}$/, 
    name:           /^.{1,64}$/, 
    email:          /^.{1,64}@.{1,255}$/,
    pass:           /^.{6,20}$/
};

Text.prototype.checkPattern = function( type ) 
{
    return this.patterns[type].exec( this.text_array[type].value );
};

Text.prototype.checkUrlAdd = function( type ) 
{
    return this.patterns[type].exec( this.text_array.url.value );
};  

Text.prototype.checkSameEmail = function() 
{
    return ( (this.text_array.email.value) === (this.text_array.email1.value) );
};

Text.prototype.checkEmpty = function() 
{
    var element;
    for ( element in this.text_array )
    {
        if( this.text_array[element].value === '' ) 
        {
            return 0;
        }
    }
    return 1;
};

在性能方面,我们并没有看到任何差异——如果有的话。在JavaScript中,
document
和其他变量一样是一个全局变量。因此,通过
document.getElementById(“someID”)
获取元素所花费的时间不会比之前在某个点将该变量保存到另一个变量并使用该变量所花费的时间多

例:

不会更快/更长

var myElem = document.getElementById("myId").value
if(myElem == something) {
    /* do something here ... */
}
要记住的重要一点是代码的可读性和可用性。总要想一想,如果你把这个代码交给其他人,他就能遵守它。除非你是在为自己做一些事情,而且计划是短期的,否则你必须维护/升级你所做的事情。有时编写代码可能需要额外的几分钟,但如果这样可以节省您的维护时间,那么这绝对是值得的

希望这有帮助

免责声明:
当我说“不快/慢”时,另一个执行是在明显的方面。可能(这里不是100%确定)有微秒的差异。。。我认为这是可以忽略的。

就性能而言,我们没有看到任何差异——如果有的话。在JavaScript中,
document
和其他变量一样是一个全局变量。因此,通过
document.getElementById(“someID”)
获取元素所花费的时间不会比之前在某个点将该变量保存到另一个变量并使用该变量所花费的时间多

例:

不会更快/更长

var myElem = document.getElementById("myId").value
if(myElem == something) {
    /* do something here ... */
}
要记住的重要一点是代码的可读性和可用性。总要想一想,如果你把这个代码交给其他人,他就能遵守它。除非你是在为自己做一些事情,而且计划是短期的,否则你必须维护/升级你所做的事情。有时编写代码可能需要额外的几分钟,但如果这样可以节省您的维护时间,那么这绝对是值得的

希望这有帮助

免责声明:
当我说“不快/慢”时,另一个执行是在明显的方面。可能(这里不是100%确定)有微秒的差异。。。我认为这是可以忽略的。

您不需要缓存
document.forms[form\u name].elements
。浏览器维护这些引用,因此在您访问它们时不需要查询DOM。以前有人提出了解析名称的问题,即name1.name2.name3…和减少查找链…这是否有效?这仅仅是为了美观……还是为了性能……在本例中,您有什么建议……我应该删除变量并直接访问吗?@stackuser0嗯,
document
是一个全局变量。全局变量的标识符解析需要更长的时间,但我们这里讨论的可能是微秒。我不会担心的。但是,我们认为您不希望代码中出现重复。如果您需要多次访问<代码>文档.Frase[FuffyNo.]元素多次,您希望将其存储在变量中以避免重复。还有与DOM和库分开的考虑……我听过PHP开发人员SGGET,将全局变量与代码的使用分开……等等。所以我可以说上面的方法…减少了查找链(可能可以忽略),并将DOM从库中分离了一点。您不需要缓存
document.forms[form\u name].elements
。浏览器维护这些引用,因此在您访问它们时不需要查询DOM。以前有人提出了解析名称的问题,即name1.name2.name3…和减少查找链…这是否有效?这仅仅是为了美观……还是为了性能……在本例中,您有什么建议……我应该删除变量并直接访问吗?@stackuser0嗯,
document
是一个全局变量。全局变量的标识符解析需要更长的时间,但我们这里讨论的可能是微秒。我不会担心的。但是,我们认为您不希望代码中出现重复。如果您需要多次访问<代码>文档.Frase[FuffyNo.]元素多次,您希望将其存储在变量中以避免重复。还有与DOM和库分开的考虑……我听过PHP开发人员SGGET,将全局变量与代码的使用分开……等等。所以我可以说上面的方法…减少了查找链(可能可以忽略不计),并将DOM从库中分离出来。我认为最佳做法是保存到局部变量。这减少了对全局变量的依赖性…+我们更快!我认为最好的做法是保存到一个局部变量。这减少了对全局变量的依赖性…+我们更快!