【问题标题】:Is adding custom method to javascript document object considered to be bad正在向被认为是错误的 javascript 文档对象添加自定义方法
【发布时间】:2014-07-15 07:38:24
【问题描述】:

我知道使用属性进行选择,您可以使用 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

这是否被认为是一种不好的做法?如果不好,那什么是好的做法?

【问题讨论】:

  • 添加它有什么意义?
  • 如果您的目标是支持document.querySelector/document.querySelectorAll的现代浏览器,那么没有理由拥有这样的功能。
  • @DaveNewton 这可能比 querySelectorAll 更快。但是,我只是在探索 javaScript 中的东西并变得好奇
  • 为什么要输入更多内容?从中获得很少/没有任何收获。

标签: javascript html performance dom


【解决方案1】:

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

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

富有洞察力的 Addy Osmani 对如何做到这一点有一些很棒的想法:http://addyosmani.com/blog/essential-js-namespacing/

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

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

然后您可以简单地调用它:myExtensions.getElementsByAttribute(...)

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

【讨论】:

    猜你喜欢
    • 2011-09-10
    • 2014-10-24
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 2019-06-18
    • 2015-03-13
    相关资源
    最近更新 更多