Stoyan Stefanov による JavaScript パターンの本を読んでいますが、コンストラクター関数の新しい演算子を強制するパターンの 1 つは次のようになります。
function Waffle() {
if (!(this instanceof Waffle)) {
return new Waffle();
}
this.tastes = "yummy";
}
Waffle.prototype.wantAnother = true;
このように書くと、次のいずれかの方法で Waffle を呼び出すことができます
var first = new Waffle(),
second = Waffle();
これは便利な機能だと思いますが、ecma/javascript の将来のバージョンで実装されるかどうかはわかりません
コンストラクター関数を作成するたびにコピーして貼り付けることができると思ったものを自分で思いついた
このようなもの
function checkInstance (name) {
if (name.constructor.name === undefined) {
return "construct it"
} else {
return false;
}
}
function Waffle() {
var _self = checkInstance.call(this, this);
if (_self === "construct it") {
return new Waffle()
}
this.tastes = "yummy"
}
var waffle = Waffle()
waffle
したがって、 new Waffle または Waffle() のいずれかの方法で Waffle を呼び出しても、オブジェクトを返すことができます。
私が抱えている問題はここにあります
if (_self === "construct it") {
return new Waffle()
}
とにかくnew Waffle()
、コンストラクター関数の実際の名前を参照せずに参照できるので、毎回これをコピーして貼り付けることができ、何も変更する必要はありません。つまり、 Waffle() を変数として保存して、次のようなことができます
return new var
this.name を使用できればいいのですが、呼び出されるまで機能しません。
スタックオーバーフローの可能性があるかどうか、少なくともここにいる何人かの人々に尋ねたかったのですが、できません。
繰り返しますが、あなたのコメントやフィードバックは大歓迎です