ESM exporting getters and setters.

# Michael J. Ryan (6 years ago)

// myFoo.mjs _hiddenFoo = false; export get foo() { return _hiddenFoo; }

export set foo(value) {
  _hiddenFoo = !!value;
}

// main.mjs
import {foo} from './myFoo.mjs';

Not sure if this has been discussed, but would be a nice feature to have in some cases... I know, total side effects and mutations, all the same, would be a nice to have in a few cases.

# Jordan Harband (6 years ago)

The getter part is already how it works - you can export let foo = false; and then later foo = true; and then export function setFoo(v) { foo = v; }. Why is the getter/setter syntax a significant improvement over this?

# J Decker (6 years ago)

On Thu, Sep 20, 2018 at 6:00 PM Jordan Harband <ljharb at gmail.com> wrote:

The getter part is already how it works - you can export let foo = false; and then later foo = true; and then export function setFoo(v) { foo = v; }. Why is the getter/setter syntax a significant improvement over this?

On Thu, Sep 20, 2018 at 4:21 PM, Michael J. Ryan <tracker1 at gmail.com> wrote:

If you removed just the export; it wouldn't be valid code....

// myFoo.mjs
_hiddenFoo = false;
/*export*/ get foo() {
  return _hiddenFoo;
}

/*export*/ set foo(value) {
  _hiddenFoo = !!value;
}
/*export*/ get foo() {
               ^^^

SyntaxError: Unexpected identifier

var hiddenFoo; var foo = { get foo() { return _hiddenFoo; },

set foo(value) {
  _hiddenFoo = !!value;
}

} export {foo};

// --- main import {foo} from './zz.mjs';

console.log( "what is foo?", foo );

// -- output

what is foo? { foo: [Getter/Setter] }

# J Decker (6 years ago)

On Fri, Sep 21, 2018 at 1:13 PM J Decker <d3ck0r at gmail.com> wrote:

On Thu, Sep 20, 2018 at 6:00 PM Jordan Harband <ljharb at gmail.com> wrote:

The getter part is already how it works - you can export let foo = false; and then later foo = true; and then export function setFoo(v) { foo = v; }. Why is the getter/setter syntax a significant improvement over this?

On Thu, Sep 20, 2018 at 4:21 PM, Michael J. Ryan <tracker1 at gmail.com> wrote:

If you removed just the export; it wouldn't be valid code....

// myFoo.mjs
_hiddenFoo = false;
/*export*/ get foo() {
  return _hiddenFoo;
}

/*export*/ set foo(value) {
  _hiddenFoo = !!value;
}
/*export*/ get foo() {
               ^^^

SyntaxError: Unexpected identifier

var hiddenFoo; var foo = { get foo() { return _hiddenFoo; },

set foo(value) {
  _hiddenFoo = !!value;
}

} export {foo};

I missed the point a little... would be something like

const foofoo = foo.foo; // which doesn't result as a setter/getter reference, but the value... export {foofoo}