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

问题描述 投票:2回答:2

我已经构建了一个javascript类,可以完成dom。为了尽可能简化从外部的使用,我现在有这样的方法:

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();然后我需要确保它首先加载,我不会忘记它,它意味着用户的额外代码。

javascript performance class static es6-class
2个回答
0
投票

你可能想看看Singleton。 它完全符合您的要求。

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


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版本更短,在这种情况下也有一些其他优点。

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

© www.soinside.com 2019 - 2024. All rights reserved.