How ES6 classes work #1231
Unanswered
gfwilliams
asked this question in
JavaScript
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Posted at 2018-10-24 by @gfwilliams
I'm just posting this up here because I had a bunch of questions in a PM and it seems what's needed is a very clear explanation about how classes work in JS.
Hopefully this will be useful:
ES6 Classes aren't magic - they're just a neat way of writing JavaScript functions
Methods
Static Methods
Using them
You can't access a method like you'd access a static method, and you can't access a static method like you'd access a method. They're different and are accessed in different ways.
Using
this
this
isn't magic either. Looking at this code:If you use
.
to call a function (eg.color.sayhi()
) thenthis
is set to the bit before the.
, egcolor
, whensayhi()
is called.Similarly, if you make a static function, it won't have access to the class instance via
this
because in order to call the static function, you're not callingcolor.function()
butColor.function()
- andColor
is the class, butcolor
is the class instance.If you call another function - especially with
setTimeout/setInterval
this
can get reset:There are a bunch of ways to work around it:
Using modules and classes
Right now, The Espruino IDE's minification doesn't handle classes well (it just turns them back into ES5 functions). However you can always set it just for whitespace.
But: neither modules nor the
exports
variable is remotely magicWhen you use
require("mymodule")
, all Espruino does is run your module code, and then replacerequire("mymodule")
with whatever was in theexports
variable after the module finished runningSo if you do this:
Then just like if you did this to any other variable,
require("mymodule")
will be equal to"The actual thing"
, not any of the stuff it was set to before.Exporting a class
It's super-easy, just do:
This is identical to just having it all in one file, without the lines
exports = Color;
andvar Color = require("mymodule");
Beta Was this translation helpful? Give feedback.
All reactions