// class
class Foo {
constructor(value) {
this.value = value
}
bar() { return this.value + 1 }
baz() { return 0 }
}
const a = new Foo(100)
a.bar()
// function
const foo = value => {
return {
bar() { return value + 1 },
baz() { return 0 },
}
}
const b = foo(100)
b.bar()
簡単に違いをまとめると
パフォーマンスはクラスのほうが prototype にまとまるので上
クラスだと最近のプライベートプロパティ機能を使わなければデータは全部見えてる
関数のほうだと return オブジェクトに含まなければ見えない
require の視点でみると関数のほうが楽
// function
const module1 = require("module")(options)
// class
const module2 = new (require("module"))(options)
new が必要なのでカッコが追加で必要になる
カッコいれないと require 自体を new することになる
いったん変数に入れてもいい
const Module = require("module")
const module3 = new Module(options)
node_modules では一旦変数に入れず require と同時にオプションを入れてインスタンスを作ってるものも多い
モジュールのインスタンスをモジュール名にしたいときはコンストラクタの名前に迷うし
でも import になると 式じゃないので取得してそのまま呼び出せない
import Module from "module"
const module4 = new Module(options)
require からの書きやすさ的な関数のメリットはなくなるし クラス構文の流行りもあって今後は new が必要なのが増えるのかも