ESM exporting getters and setters.
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 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 laterfoo = true
; and thenexport 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] }
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 laterfoo = true
; and thenexport 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}
// myFoo.mjs _hiddenFoo = false; export get foo() { return _hiddenFoo; }
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.