我注意到有兩種不同的方法可以有效地在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