【发布时间】:2019-02-15 12:30:55
【问题描述】:
我已经构建了一个对 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 对象存储到内存中?
- 我需要担心吗?
- 如果是,有什么更好的方法,但仍然超级简单?
我想远离什么
从一开始我就一直需要将对象传递给将要使用它的函数。见下文。
let hello = new HelloCore();
function my_function(hello) {
let id = 2;
hello.add(id);
}
my_function(hello);
使用静态方法,我不需要到处传递对象。我可以从任何地方触发该功能。
我可以使用全局 var hello = new Hello();,但我需要确保它首先被加载,我不会忘记它,这意味着用户需要额外的代码。
【问题讨论】:
-
使用静态类方法,hello实例在函数调用后不再可用......
-
我会一直传递对象。它是基本的依赖注入,使您的代码更灵活/可扩展/可重用,更容易测试,并且在过程中不那么晦涩。
-
此时,阅读您的代码,我想知道为什么
helloCore不是静态的。目前,您的hello静态类中存在信息丢失,因为内部helloinstance 丢失了。是否有任何“真实”的代码示例更接近您想要实现的目标? -
您应该永远创建一个只包含
static方法的class。您可以轻松地使用对象文字,因为您不打算实例化任何东西,所以这会更有效和更合适。在你的情况下:const hello = { add(id) { new HelloCore().add(id); }, delete(id) { new HelloCore().delete(id); }, … }; -
@JensTörnell 是的:它不会创建永远不需要的构造函数和原型对象(甚至可能被滥用,或者至少会让读者感到困惑)。
标签: javascript performance class static es6-class