Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在原型中添加或删除类之前,我是否应该检查该类?_Javascript_Prototype - Fatal编程技术网

Javascript 在原型中添加或删除类之前,我是否应该检查该类?

Javascript 在原型中添加或删除类之前,我是否应该检查该类?,javascript,prototype,Javascript,Prototype,我有一行JavaScript代码,使用prototype,每秒运行几次。根据某些变量的状态,这行代码将确保某些元素有或没有类 我的问题是,我应该盲目地添加或删除该类,还是应该先检查它?我应该有以下代码: if (!element.hasClassName("overtime")) { element.addClassName("overtime"); } if (element2.hasClassName("overtime")) { element2.removeClassName("

我有一行JavaScript代码,使用prototype,每秒运行几次。根据某些变量的状态,这行代码将确保某些元素有或没有类

我的问题是,我应该盲目地添加或删除该类,还是应该先检查它?我应该有以下代码:

if (!element.hasClassName("overtime")) {
  element.addClassName("overtime");
}
if (element2.hasClassName("overtime")) {
  element2.removeClassName("overtime");
}
或者仅仅拥有:

element.addClassName("overtime");
element2.removeClassName("overtime");
我的理由是,添加和删除可能是更昂贵的方法,即使更改发生得非常快,也可能修改DOM,导致片状或加剧内存泄漏或类似情况。

使用第二种方法

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

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


请问为什么这个函数每秒运行几次?当其中一个变量发生变化时,为什么不改变类呢?因为它实际上并不是一个发生变化的变量。这类似于if(newdate()-start\u time>too\u long){…}。我必须创建另一个状态变量,这是我想要避免的。
  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;
  },