Я читал книгу шаблонов JavaScript Stoyan Stefanov, и один из шаблонов для принудительного применения нового оператора для функций конструктора выглядит следующим образом
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
Поэтому я могу вызвать Waffle в любом случае с помощью новой Waffle или Waffle() и все равно вернуть объект
Моя проблема, что у меня есть, здесь
if (_self === "construct it") {
return new Waffle()
}
В любом случае, я могу ссылаться на new Waffle()
, не ссылаясь на фактическое имя функции конструктора, поэтому я мог бы копировать и вставлять это каждый раз и ничего не менять. Значение Я мог бы сохранить Waffle() как переменную и сделать что-то вроде
return new var
Я бы хотел использовать this.name, но это не работает либо до его вызова.
У меня есть чувство, что я не могу не хотеть, по крайней мере, спросить некоторых людей здесь о переполнении стека, если это была возможность
Снова ваши комментарии и отзывы приветствуются