Le 26/12/2012 23:14, David Herman a écrit :
On Dec 24, 2012, at 2:34 PM, David Bruant <bruan...@gmail.com> wrote:

I've reading the loader API [1] and I was wondering if it was possible to 
dynamically change the global. I think it is by doing the following, but tell 
me if I'm wrong:
That wasn't the intention. It probably wasn't written out since the full 
semantics isn't spelled out yet (though Sam and I have been making good 
progress working through the details of the semantics), but the idea was that 
the properties of the options object are read in up-front and stored 
internally. The getter always returns that internally closed-over value that 
was obtained when the loader was first created.
Ok, thanks for the clarification. The strawman as it was didn't explain the full semantics hence my question.

In other words, in the global in the loader the initial or the dynamic value of the 
"global" option?
The initial value. We can look into what it would mean to make it modifiable, 
but we'd probably not make that the API; we'd probably just have a setter.
Good point.
[Adding MarkM into the mix for this part]
I wish to point out a potential security/convenience issue regarding inherited getter/setters. My point is broader than the 'global' loader situation (it includes everything covered by WebIDL for instance), but let's assume a 'global' setter is added to Loader.prototype and I'll draw the general conclusion from this example. If I want to share a single loader instance to someone else, but not provide access to the loader global, I have to delete Loader.prototype.global (otherwise, someone can extract the getter and use the reference to the loader instance to retrieve the global) The problem with deleting Loader.prototype.global is that it's deleted for every single instance which in turns make the code harder to write (because, defensively, one needs to extract the getter/setter pair an then use that instead of the more convenient "myLoader.global" syntax). The opposite way, if freezing Loader.prototype, it becomes *impossible* to revoke the capability to introspect instances using the inherited getters/setters.

In essence, an inherited accessor means that the choice allowing access to a given property isn't a per-instance choice anymore. It's a per-"class" choice (keep it or remove it for every instance) which is probably fine for most situations, but certainly too coarse for some others.

Since the amount of storage is equivalent anyway (you need some sort of private property to associate the global to the loader instance), I would suggest to go to an own "global" data property for loaders... and I guess to stay away from inherited accessors when describing a per-instance property for the reasons I described.

David
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to