On Monday, August 27, 2012 at 3:34 PM, Matthew Robb wrote:

> In the end I am not looking for reads well, I am looking for minimal semantic 
> difference that can ideally work as a target for compiling to es3. I am 
> PREFERRING to not have functions as ownProperties. I can't use hard binding 
> because if the function is assigned to some place else it should no longer be 
> given access to the private name's it would have had as an instance 
> method/property (I'm assuming this actually).
>  
> I have done a little more playing around and am currently right about here:
>  
> class myClass {
>     private test;
>  
>  
>  

Just a heads up: max-min classes do not include support for declaring data 
properties or private variables in the class body.

On a broader note, we discussed renaming Name to Symbol, here: 
https://mail.mozilla.org/pipermail/es-discuss/2012-August/024278.html

Rick


  
>     constructor() {
>         this[test] = 0;
>     }
>     getTest() this[test];
>     doNothing(){}
> }
>  
>  
> COMPILES TO:
>  
> var myClass = (function(){
>  
>     var __myClass = function __myClass(__privates, __this) {  
>  
>         // All class methods using private names would be defined here
>         this.getTest = function() {
>  
>             // All appearances of this[test] would be replaced by the below 
> ternary operation  
>             return (this === __this ? __privates : this).test;
>         }
>  
>         return (__this && (__this.__proto__ = this)) ? __privates : this;
>     }
>  
>     var myClass = __myClass.prototype.constructor = function myClass() {
>         var __privates = new __myClass({}, this);
>         // Constructor body
>         __privates.test = 0;
>     }
>  
>      myClass.prototype = __myClass.prototype = new __myClass()
>  
>      myClass.prototype.doNothing = function(){}
>  
>     return myClass;  
>  
> })();
>  
>  
> On Mon, Aug 27, 2012 at 3:17 PM, David Bruant <[email protected] 
> (mailto:[email protected])> wrote:
> > Le 27/08/2012 19:54, Matthew Robb a écrit :
> > > I know this has some serious ugly to it but in the spirit of knowing what 
> > > COULD potentially create the expected behavior, would this not do the 
> > > trick?  
> > >  
> > > var myClass = (function(){  
> > >  
> > >         function myClass(){  
> > >             var __priv = Object.create(this);
> > >             var __this = __priv.__this = this;
> > >  
> > >             this.getTest = function(){  
> > If you're willing to have functions as own properties in each instance, you 
> > need the method on the prototype any longer.
> > If JS engines do their job properly, they will store the function body once 
> > and just create new function objects for each instance (which you do 
> > anyway, so it has no extra cost)
> >  
> >  
> > >                return myClass.prototype.getTest.apply((this 
> > > ===__this)?__priv:this, arguments);  
> > >             }
> > >  
> > >             __priv.test = 0;  
> > >         }
> > >  
> > >         myClass.prototype.getTest = function() {  
> > >           var __this = this.__this || this, __private = this;
> > >           return __private.test;  
> > >        }
> > >  
> > >         return myClass;
> > >     })();   
> > Version with having a function on each instance:
> >  
> >     function myClass(){
> >         var test = 0;
> >  
> >         this.getTest = function(){
> >             return test;
> >         };
> >     }
> >  
> > No underscore ;-)
> >  
> > Through the different messages we've shared, you've covered the different 
> > ways to do encapsulation and code sharing and the conclusion is that either 
> > you need to add a function to each object (which yield a linear cost for no 
> > reason) or your abstaction leaks if you want to prototype function to 
> > access per-object data. A last alternative is to associate private data via 
> > a WeakMap (it can be shimmed in ES5 with the same garbage collection 
> > properties and with good performances) that inherited functions all have 
> > access to. It works, but it's burdensome and doesn't read as well as object 
> > properties.
> >  
> > David
>  
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
>  
>  


_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to