以下の内容はhttps://let.blog.jp/tag/newより取得しました。


new は省略可能でいいと思う
Array や RegExp や Error など 昔からあるものには new があってもなくてもいいものがあります
オブジェクトを作るときはとりあえず 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}
new を使わない
クラス構文使うと new 必須にされるのが地味に鬱陶しい
普通に関数の場合は new コンテキストじゃなければ中で new したのを返せばいいけどそれもできない

function Foo(a) {
if (this === window || !this) return new Foo()

this.value = a
}

構文を使わなくしたり ラップしたり

const unew = (ctor, proto) => (...a) => {
const ctx = { __proto__: proto }
return ctor(ctx, ...a) || ctx
}

const F = unew(
(self, a, b) => {
self.value = a
self.value1 = self.m(b)
},
{
m(x) {
return this.value + x
},
p() {
return this.value1
},
}
)

F("a", "b").p()
// ab

const unew2 = cls => (...a) => new cls(...a)

const G = unew2(
class {
constructor(a, b) {
this.value = a
this.value1 = this.m(b)
}
m(x) {
return this.value + x
}
p() {
return this.value1
}
}
)

G("a", "b").p()
// ab



以上の内容はhttps://let.blog.jp/tag/newより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14