the following is how I usually consider lazy values ```js class Any { _lazy(name) { switch (name) { case 'uid': return Math.random(); // others ... eventually } } get uid() { var value = this._lazy('uid'); // from now on, direct access Object.defineProperty(this, 'uid', {value}); return value; } }
const a = new Any; a.uid === a.uid; // true ``` If I understand correctly your proposal is to use Lazy as generic descriptor, is that correct ? ```js Object.defineProperty({}, 'something', new Lazy(function (val) { return this.shakaLaka ? val : 'no shakaLaka'; })); ``` ??? If that's the case I see already people confused by arrow function in case they need to access the context, plus no property access optimization once resolved. It's also not clear if such property can be set again later on (right now it cannot) 'cause lazy definition doesn't always necessarily mean inability to reassign. What am I missing/misunderstanding? Regards On Thu, Aug 31, 2017 at 2:21 PM, Isiah Meadows <isiahmead...@gmail.com> wrote: > It'd be really nice if lazy values made it into the spec somehow. I've > already found myself using things like this [1] quite a bit, and I've > also found myself frequently initializing properties not on first > access. > > [1]: https://gist.github.com/isiahmeadows/4c0723bdfa555a1c2cb01341b323c3d4 > > As for what would be a nice API, maybe something like one of these? > > ```js > class Lazy<T> { > constructor(init: () => T); > get(): T; // or error thrown > } > > function lazy<T>(init: () => T): () => T; // or error thrown > > function lazy<T>(init: () => T): { > get(): T; // or error thrown > } > ``` > > Alternatively, syntax might work, with `do` expression semantics: > > ```js > const x = lazy do { ... } > // expose via `x.get()` or just `x()` > ``` > > ----- > > Isiah Meadows > m...@isiahmeadows.com > > Looking for web consulting? Or a new website? > Send me an email and we can get started. > www.isiahmeadows.com > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss