Great, glad to hear that's coming! I think sealing is a fine solution,
it'll do what I want and doesn't cause fits for the engine makers.
That said, it has one problem -- base classes. You can't seal them
because the constructor in the extended class would fail (I tried it)
and so the base classes would always have to remain unsealed which
means you either (1) understand that or (2) always use an extended class
if you care for level of code safety.
[>] Brian
On 3/18/2016 11:50 AM, kdex wrote:
Brian, Your first example isn't too far from ES2017. Leave away the
`let`s and seal it, and you got:
```js
"use strict";
class Test {
x = 1;
y = 2;
constructor() {
Object.seal(this);
this.z = 3; // TypeError
}
}
```
You can already use this using transpilers (at least babel supports it).
On 18.03.2016 15:39, Brian Barnes wrote:
Ugh, well, I guess I typed a lot of stuff for nothing! And by the
look of their experiment, what I wanted was actually one of the major
blockers.
It seems classes will really need a more standard type of syntax (non
static) before you could actually achieve this, and might be a bridge
too far for javascript:
class test
{
let x=1;
let y=2;
constructor() {}
func() { this.z=2; } // syntax error
}
Though it could be kind of faked by some kind of reverse hoisting,
i.e., rebuilding the code inside the engine:
class test
{
constructor()
{
this.x=1;
this.y=2;
// stuff that was in the constructor
Object.seal(this);
}
...
}
[>] Brian
On 3/18/2016 10:04 AM, Sébastien Doeraene wrote:
Hi,
The Strong Mode experiment was canceled:
https://groups.google.com/forum/#!topic/strengthen-js/ojj3TDxbHpQ
Cheers,
Sébastien
On Fri, Mar 18, 2016 at 3:59 PM, kdex <[email protected]
<mailto:[email protected]>> wrote:
Already considered and to be implemented via strong mode IIRC.
On 18.03.2016 14:36, Brian Barnes wrote:
I know properties on classes are getting a look over for the
next iteration (last I checked) and I understand javascript is
obviously a different language then other oo languages with a
different foundation, but I bring this up for it's usage in
producing stricter code that reduces errors and is easier to
analyze. A vote for this if anybody considered it!
class Test
{
constructor()
{
this.x=1;
}
func1()
{
this.y=2;
}
func2()
{
console.log(this.x+','+this.y);
}
}
var test1=new Test();
test1.func1();
test2.func2(); // outputs 1,2
var test2=new Test();
test2.func(); // outputs 1,undefined
I know classes contents are meant to be in strict mode, and I
thinking that only allowing properties to be created in the
constructor (or eventually static properties on the class
itself) would make a system less prone to the conditions like
you see above. Basically, func1() would produce a error when
run.
I can see why this type of initialization of properties could be
desired, though, especially as it reflect the way it would have
worked if you used a function instead of a class.
[>] Brian
_______________________________________________
es-discuss mailing list
[email protected] <mailto:[email protected]>
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected] <mailto:[email protected]>
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
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
_______________________________________________
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