On Dec 21, 2010, at 4:01 PM, Oliver Hunt wrote:
> function MyAwesomeThing() {
> ....
> }
>
> MyAwesomeThing.prototype.myCoolFunction = function() {
> if (!this._myCachedHotness)
> this._myCachedHotness = doExpensiveThing(this)
> return this._myCachedHotness;
> }
>
> I see this nifty private names feature, and say "cool! now i can make my
> cache super secret!" and do:
>
> MyAwesomeThing.prototype.myCoolFunction = function() {
> private cachedHotness;
> if (!this.cachedHotness)
> this.cachedHotness = doExpensiveThing(this)
> return this.cachedHotness;
> }
>
> I would _expect_ this to work. That's what the syntax makes me think. But
> it won't work because 'cachedHotness' is going to be different on every call
> (at least to my reading).
>
> I am not trying to argue that making the above work is impossible -- you just
> need to use a few closures to get everything into the right place. But it is
> contrary to what I might expect or want.
I don't think there is any new issue here we don't already have with things
like closure captured object state or prototype construction such as:
function awesomeFactory(a,b) {
const awesomeProto = { ...}; //oops, better move this outside of
awesomeFactory!!
return Object.create(awesomeProto, {a: {value:a}, b: {value:b}});
}
Personally, I think function own (aka static) declarations are a good solution
to this problem and could be apply equally well to private name declarations.
However, that's not something that I want to put on the table at this time.
Allen
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss