我注意到有两种不同的方法可以有效地在JavaScript中编写一个类(或类的东西)。使用简单的计数器类为例:Class vs函数返回对象
一个真正的类(用作new Counter1()
)
class Counter1 {
constructor(count = 0) {
this.count = count;
}
inc() {
this.count++;
}
get() {
return this.count;
}
}
的函数返回一个对象(用作Counter2()
)
function Counter2(count = 0) {
return {
inc() {
count++;
},
get() {
return count;
},
};
}
我有很多的代码可以用这两种风格中的任何一种书写。我应该使用哪个?
这是我的理解:
Counter1
可以instanceof
和继承使用,但是更详细的,没有真正的私有属性(如count
属性暴露)。
Counter2
更简洁,具有真正的私有方法/状态(只是函数中的局部变量),但不能与instanceof
和继承一起使用。它还会为每个实例创建inc
和get
函数的新副本,这可能会影响性能?我不知道。
与功能构造新的关键字可能虽然原型的属性仍然无法访问私有作用域变量,但最好。 – user7951676