Я пытаюсь вернуть объект вместе с функцией конструктора.У меня что-то работает, но это уродливо, и я надеялся, что есть лучший способ.
function Something(val) {
if (!(this instanceof Something))
return new Something(val)
let Constructor = function() {
return function(val) {
return new Something(val)
}
}
let obj = new Constructor()
obj.test = val
return obj
}
let a = Something('a')
let b = new Something('b')
let c = b('c')
console.log(a) // { [Function] test: 'a' }
console.log(b) // { [Function] test: 'b' }
console.log(c) // { [Function] test: 'c' }
Спасибо за любую помощь.
Редактировать:
При дальнейшем рассмотрении я считаю, что необходимы дополнительные объяснения, а также решил подойти к проблеме под другим углом.
Хорошо, давайте посмотрим, смогу ли я гипотетически сформулировать свою проблему.У меня есть Фабрика, которая должна преобразовываться в другой «класс» (хотя и с использованием прототипов функций ES5).Этот другой «класс» должен иметь возможность иметь необязательную функцию конструктора класса вместе с тем, что мы называем «методами класса».Этот пользовательский класс также должен быть экземпляром, чтобы он мог хранить данные из своих методов (см. this
)
В идеале нам нужны следующие синтаксисы.
const something = Something('customClass') // new keyword is optional
something.someMethod()
// or
something(optionalConfig).someMethod()
ВВ дополнение к вызову класса с необязательным конструктором, мы также должны создать новый экземпляр.
Чтобы эти строки действовали в отдельных экземплярах:
something.someMethod() // refers to the instance already created
something(optionalConfig).someMethod() // new instance
something(otherOptionalConfig).someMethod() // new instance