javascript静态类的性能继承非静态类

时间:2019-02-15 12:30:55

标签: javascript performance class static es6-class

我建立了一个对dom做事的javascript类。为了尽可能简化外部使用,我现在提供了以下方法:

hello.add(id);
hello.delete(id);
hello.select(id);

为使上述工作正常进行,我设置了一个使用非静态类的静态类,如下所示:

静态课程

class hello {
  static add(id) {
    let hello = new HelloCore();
    hello.add(id);
  }

  static delete(id) {
    let hello = new HelloCore();
    hello.delete(id);
  }

  static select(id) {
    let hello = new HelloCore();
    hello.select(id);
  }
}

非静态类

真正的代码是500行,带有一个构造函数,依此类推。

class helloCore() {
  add() {
    // Do something
  }

  delete() {
    // Do something
  }

  select() {
    // Do something
  }
}

现在非常简单,但是我想知道这种方法是否存在性能问题。我的猜测是,它会在每次对内存的静态调用中存储一个新的javascript对象?

  1. 我需要担心吗?
  2. 如果可以,哪种方法更好,但仍然超级简单?

我想远离的东西

从一开始,我一直需要将对象传递给将要使用它的函数。见下文。

let hello = new HelloCore();

function my_function(hello) {
  let id = 2;
  hello.add(id);
}

my_function(hello);

使用静态方法,我不需要到处传递对象。我可以随时随地触发该功能。

我可以使用全局var hello = new Hello();,但随后我需要确保首先加载它,以免忘记它,这对用户来说意味着额外的代码。

2 个答案:

答案 0 :(得分:0)

您可能想看看Singleton
它正是您要实现的目标。

但是,我必须承认我(和许多其他开发人员)对单例,全局和静态类不满意,这并不是因为性能,而是作为一种通用模式。
This SO question讲述了为什么单例不好。

答案 1 :(得分:0)

@mareful评论了此有用信息:

  

使用静态类方法时,在函数调用之后,hello实例将不再可用...

这意味着静态类将在每次调用后自动清除。

然后,我收到@Bergi的评论,提出使用const并包含具有相同结果的函数的想法。这种方法非常有效。

之前-具有静态类

class hello {
  static add(id) {
    let hello = new HelloCore();
    hello.add(id);
  }

  static delete(id) {
    let hello = new HelloCore();
    hello.delete(id);
  }

  static select(id) {
    let hello = new HelloCore();
    hello.select(id);
  }
}

之后-使用const

const hello = {
  add(id) {
    new HelloCore().add(id);
  },
  delete(id) {
    new HelloCore().delete(id);
  },
  select(id) {
    new HelloCore().select(id);
  }
};

在两种情况下,我都可以像hello.add(id);那样称呼它。 const版本较短,在这种情况下也具有其他优点。

  

它不会创建不需要的构造函数和原型对象(甚至可能被滥用,或者至少会使读者感到困惑)。