Можно ли объединить в одно утверждение следующее:
// Combine from here
const foo = function() {
return 'hello';
}
foo.world = 'world';
// to here
console.info(foo() + foo.world) // helloworldМне только любопытно, можно ли комбинировать приведенные выше утверждения. Меня не волнует console.info....
Я понимаю это, но console.info — это единственное, что у вас есть, чтобы определить ваши ограничения. Непонятно, какова ваша конечная цель. Я не уверен, как далеко я могу зайти, манипулируя вашей функцией. Может ли это быть функцией-конструктором? new foo()? Класс?
Пока я могу звонить foo() и у него есть недвижимость foo.world меня все устраивает. Мне просто любопытно, смогу ли я сделать это за один шаг или мне нужна фабрика для создания этих объектов.
что-то вроде const foo = Object.assign(function() { return 'hello'; }, { world: 'world' })? или foo.world = 'world'; может быть внутри функции
@Slai, это работает! Не могу поверить, что я не подумал об этом. Это все еще фабрика, но, по крайней мере, это ванильная острота.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


(foo = () => 'hello').world = 'world'
запустив это в консоли Chrome. foo() миры, но foo.world не определено.
@Bradd извините, я сделал правку, теперь foo.world определен
теперь это работает, но возможно ли сделать это с несколькими свойствами?
Вы можете использовать defineProperties: Object.defineProperties((foo = () => 'hello'), {world: {value:'world'}, Universe: {value:'universe'}})
Вы должны назначить static вне объявления функции/класса. Вот альтернативная версия ES5, использующая классы.
class foo {
constructor() {
// constructor...
}
toString() {
return 'hello'
}
}
foo.world = 'world' // static member variables need to be assigned outside, no other way
console.info(new foo() + foo.world) // helloworld"статику нужно назначать снаружи, иначе никак" - думаю, был ответ на мой вопрос. Похоже, что я бы также ограничился одним статическим за раз, верно?
Ну, я действительно имею в виду статические переменные-члены. Статические методы фактически разрешены. Вот предложение 2-летней давности по добавлению статический конструктор и статические переменные-члены в JavaScript.
Вы можете переместить объявление свойства в в функцию.
let foo = function () {
foo.world = 'world';
return 'hello';
};
console.info(foo() + foo.world)
Я предполагаю, что ваш вопрос подразумевает, что
console.info(foo() + foo.world)неизменен?