将自定义方法添加到被认为是坏的javascript文档对象

时间:2014-05-26 13:48:39

标签: javascript html performance dom

我知道通过使用属性进行选择,您可以使用querySelectorAll并在[]内传递属性。但是,这不是我的问题。例如,我有一个自定义方法,如

function getElementsByAttribute(attribute){
  var allElements = document.getElementsByTagName('*'), 
      elm,
      found=[];
      for (var i = 0; i < allElements.length; i++)
      {
          elm = allElements[i];
          if (elm.getAttribute(attribute))
          {
              found.push(elm);
          }
      }
      return found;
  }

如果我想通过

将其添加到文档对象中
document.getElementsByAttribute = getElementsByAttribute

这被视为不良做法吗?如果不好,那么什么是好的做法?

1 个答案:

答案 0 :(得分:0)

它通常被认为是一个坏主意™。以任何方式修改语言的核心,而动态语言允许的惊人能力,可能导致意外的行为。例如,如果getElementsByAttribute成为JS中的方法,会发生什么。然后你的方法会覆盖它并导致任何人依赖你的代码来获得奇怪和意想不到的行为,而不是核心的JS方法。

通常建议将自定义方法放在您拥有的命名空间中,并且不会污染其他人的核心语言。

无与伦比的Addy Osmani对于如何做到这一点有一些很好的想法:http://addyosmani.com/blog/essential-js-namespacing/

一个这样的例子可能如下所示:

myExtensions = {
  getElementsByAttribute: function(attribute) { ... }
}

然后您只需拨打:myExtensions.getElementsByAttribute(...)

即可

如果你想让它类似于在文档上调用它,你可以调用命名空间myDocument而不是myExtensions或者你想要的任何内容。