Это то, чем я сейчас занимаюсь.
var foo = function() {
var x = someComplicatedComputationThatMayTakeMoreTime();
this.foo = function() { return x; };
return x;
}
Это работает, но только если foo вызывается как функция, подобная
foo();
Но что, если я захочу вызвать его как нормальную переменную со значением? Я мог бы изменить код, чтобы он был
var foo = function() {
var x = someComplicatedComputationThatMayTakeMoreTime();
this.foo = x;
return x;
}
Это позволило бы мне вызывать его только один раз как функцию, а затем как обычную переменную. Но это все еще не то, что я хочу. Кроме того, это усложняется, если его случайно снова вызывают как функцию, возвращающую ошибку.
Возможно ли это даже в JavaScript?
Кстати, это расширение Chrome / Firefox, поэтому совместимость с IE не имеет значения.
Завершено использованием toString, потому что получатели не позволяют мне переопределить весь атрибут, с ним должна быть связана функция. И toString имеет более чистый синтаксис.