On 10/5/16, 11:13 AM, "Harbs" <[email protected]> wrote:
>And what’s the reason we’re not just using Foo.someOtherStaticProperty?
>Is this a getter issue?
Getters/Setters need to be defined via Object.defineProperty. It is the
only way to access a function via a property name (without using
parentheses). IOW
function Foo() {} // defines the class
Foo.someMethod = function() // defines a method.
Foo.someVar; // defines a var or const.
But when you use them, you have to write:
Foo.someMethod() // note the parenthesis for function call
Or
Foo.someVar // but no function will be called.
We want getters and setters to be accessed like:
Foo.someGetter; // calls a function
instead of:
Foo.someGetter();
So, we create an Object.defineProperties structure that looks like:
{ someGetter: { get: // the code that would run }}
Once you do that, when scanning Foo for vars and methods, GCC will not see
these getters and setters so it will not think that Foo has a someGetter
property. GCC is only looking for the pattern of Foo.someMethod =
function and Foo.someVar = initialValue;
So then when you use someGetter as
var value = Foo.someGetter;
GCC just renames it to a global like:
var value = xx;
And thus, the someGetter code is never called.
HTH,
-Alex