我应该在原型中添加或删除它之前检查类吗?

时间:2010-10-02 13:15:59

标签: javascript prototype

我在JavaScript中有一行代码,使用原型,每秒运行几次。这段代码取决于某些变量的状态,可以确保某个元素具有或不具有类。

我的问题是,我应该盲目地添加或删除课程,还是应该先检查?我应该有这个代码:

if (!element.hasClassName("overtime")) {
  element.addClassName("overtime");
}
if (element2.hasClassName("overtime")) {
  element2.removeClassName("overtime");
}

或者只是拥有:

element.addClassName("overtime");
element2.removeClassName("overtime");

我的理由是添加和删除可能是更昂贵的方法,即使更改发生得非常快,也可能会修改DOM,导致片状或加剧内存泄漏或类似的事情。

1 个答案:

答案 0 :(得分:2)

使用第二个。

通过检查原型代码,您可以看到:

  • addClassName已检查是否存在
  • hasClassName和removeClassName都使用一个RegExp进行搜索或替换,因此没有任何好处

代码:

  hasClassName: function(element, className) {
    if (!(element = $(element))) return;
    var elementClassName = element.className;
    return (elementClassName.length > 0 && (elementClassName == className ||
      new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
  },

  addClassName: function(element, className) {
    if (!(element = $(element))) return;
    if (!Element.hasClassName(element, className))
      element.className += (element.className ? ' ' : '') + className;
    return element;
  },

  removeClassName: function(element, className) {
    if (!(element = $(element))) return;
    element.className = element.className.replace(
      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
    return element;
  },