On Mon, Nov 16, 2015 at 4:20 PM, Alex Harui <aha...@adobe.com> wrote:

> Looks like the work would be:
>
> 1) add the wrapping function
> 2) change all method and property output to not include the package.
>
> Is it worth it just to try to get better privacy?  I think just adding an
> inner class would be less work for me.  Some other volunteer could make
> your proposed change later.
>
>
Is there some one else working on the compiler code other than you Alex?

Mike



> -Alex
>
> On 11/16/15, 1:04 PM, "Josh Tynjala" <joshtynj...@gmail.com> wrote:
>
> >All members assigned to the prototype would automatically be available.
> >You'd use pretty much the same syntax, but you wouldn't need to reference
> >the full package name for each member:
> >
> >some.package.SomeClass = (function()
> >{
> >    var SomeClass = function(){};
> >    SomeClass.prototype.someMethod = function()
> >    {
> >    };
> >    return SomeClass;
> >})();
> >
> >You wouldn't be able to define the methods outside of the IIFE, since they
> >wouldn't be able to access any private classes inside the IIFE.
> >
> >I just checked how TypeScript handles modules, and they use the same
> >technique, with a slight variation on how the package/module is assigned.
> >Here's similar TypeScript:
> >
> >//TypeScript
> >module some.package {
> >    export class SomeClass {
> >        constructor() {
> >        }
> >        someMethod() {
> >        }
> >    }
> >}
> >
> >And here's the generated JavaScript:
> >
> >//JavaScript
> >var some;
> >(function (some) {
> >    var package;
> >    (function (package) {
> >        var SomeClass = (function () {
> >            function SomeClass() {
> >            }
> >            SomeClass.prototype.someMethod = function () {
> >            };
> >            return SomeClass;
> >        })();
> >        package.SomeClass = SomeClass;
> >    })(package = some.package || (some.package = {}));
> >})(some || (some = {}));
> >
> >The main difference is that it passes in the objects used to define the
> >package/module as arguments rather than assigning them completely outside
> >of the function. I don't know what your concerns are for the compiler work
> >required, but maybe that would make a difference.
> >
> >- Josh
> >
> >On Mon, Nov 16, 2015 at 12:07 PM, Alex Harui <aha...@adobe.com> wrote:
> >
> >>
> >>
> >> On 11/16/15, 10:36 AM, "Josh Tynjala" <joshtynj...@gmail.com> wrote:
> >>
> >> >The Immediately-Invoked Function Expression (IIFE) pattern could be
> >>used
> >> >to
> >> >create private classes.
> >> >
> >> >some.package.SomeClass = (function()
> >> >{
> >> >    var SomeHelperClass = function(){};
> >> >
> >> >    var SomeClass = function(){};
> >> >
> >> >    return SomeClass;
> >> >})();
> >> >
> >> >SomeHelperClass will only be accessible inside the (function(){}).
> >> >SomeClass will be returned to allow it to be exposed externally. It's a
> >> >pretty common pattern in JavaScript to avoid polluting the global
> >> >namespace.
> >>
> >> Thanks for the suggestion.  Would that work for method access?  For
> >> example:
> >>
> >> package some.package
> >> {
> >>    public class SomeClass
> >>    {
> >>       public method someMethod()
> >>       {
> >>         var foo:SomeHelperClass = new SomeHelperClass();
> >>       }
> >>    }
> >> }
> >>
> >> class SomeHelperClass
> >> {
> >> }
> >>
> >>
> >>
> >> Right now, someMethod is generated as:
> >>
> >> some.package.SomeClass.prototype.someMethod = function()
> >> {
> >> }
> >>
> >> Would it have to go within the outer function?  That might be a lot of
> >> compiler work.
> >>
> >> -Alex
> >>
> >>
>
>

Reply via email to