オブジェクトを作るときはとりあえず new
という感じで書いてましたが new ってけっこう邪魔です
単項演算子ではあるもののスペースで離れてる分 ! や + と違って 複雑な式の中に入っていると読みづらいケースがあります
この点は await も同様ですがこっちは非同期化して Promise を待機するという重要な意味があります
それに対して new はなくてもいいものです
普通に関数を呼び出してオブジェクトが返ってくることも当たり前なので new をつける必要は特に無いです
内部的に this の扱い方の違いとかがあるものの 内部で完結可能で使う側に new を強制させる理由はないです
以前はプロジェクト内のファイル全検索時にインスタンス作成箇所がわかりやすい?とかも考えましたが 普通に関数呼び出しを探せばいいのであまり効果はなかったです
むしろ new の後に改行しても構文的には問題ないので探しづらくなっています
あと Number 等のプリミティブ型で new を使うとオブジェクトとして受け取るので これらは new を使うべきではないです
そうなると Number 等だけを例外として考えないといけなくなります
そんな事を考えずとりあえず共通で new なしで呼び出せるほうが良いです
ライブラリでも new が必要かどうかはそれぞれバラバラです
これはいるこれはいらないなんて考える必要もないように 全部 new なしのほうが優れていると思います
ということで new を使わないようにしようと思って書いてみましたが class 構文を使われたものでは new が必須とされていました
class A {
a = 1
}
A()
// TypeError: Class constructor A cannot be invoked without 'new'
そういえばそんな仕様あったっけ
余計なことしなくていいのに
どうせなら Python のような new を使わない言語に合わせてくれればよかったのに
最低限自分の作る分は new を要求しないようにするためこういう風にラップしました
//// [A.js] ////
class A {
a = 1
}
export default function() { return new A() }
//// [index.js] ////
import A from "./A.js"
console.log(A())
// A {a: 1}
console.log(new A())
// A {a: 1}