Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #39739
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Newsgroups | comp.lang.javascript |
| Subject | Re: Exposing a module in the current scope |
| Date | 2021-03-22 21:05 +0100 |
| Organization | PointedEars Software (PES) |
| Message-ID | <5445729.DvuYhMxLoT@PointedEars.de> (permalink) |
| References | <20210318192107.08e2fac2d6aeada5596c4dd0@freeshell.de> |
Anton Shepelev wrote:
> It looks like in the system for which I need to write
> server-side JavaScript, neither CommonJS nor ECMAScript
> modules are supported, but it provides its own module system
> that works as shown below:
>
> $.import("anton_test/util.xsjslib","util"); // import module
> $.anton_test.util.log("Log from library."); // invoke a function
>
> Is it somehow possible to have all the functions from `util'
> available in the current scope, so that I could invoke them
> by their names: log("Hello"),
I think you mean the _local execution context_ instead, as the current scope
is somewhat loosely defined as it extends to the global execution context.
Modules were introduced precisely to avoid the problems that your wish
typically produces (what if there is a log() etc. defined in the execution
context already?).
> rather than, say, util.log("Hello"),
While there is at least one fancy way to do this for several and selected
properties only (which a custom module system might provide), the simple
code
const util = $.anton_test.util;
(or
var util = $.anton_test.util;
to be backwards-compatible), is literally the best that you can do,
in general.
Note that
const log = $.anton_test.util.log;
is NOT equivalent because “$.anton_test.util.log()” may use “this” to refer
to “$.anton_test.util” which will refer to the global object, or (in strict
mode) be the “undefined” value, if you then call “log()”. The equivalent
variant would be
const log = $.anton_test.util.log.bind($.anton_test.util);
but when emulated for backwards compatibility (and maybe even when
Function.prototype.bind() is available as a built-in), this comes at the
price of reduced runtime efficiency when it is is called. So just to be
able to write “log” instead of “util.log” hardly appears to be worth it.
--
PointedEars
FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.
Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Exposing a module in the current scope Anton Shepelev <antonius@freeshell.de> - 2021-03-18 19:21 +0300
Re: Exposing a module in the current scope Anton Shepelev <anton.txt@gmail.com> - 2021-03-18 23:57 +0300
Re: Exposing a module in the current scope "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-18 18:45 -0700
Re: Exposing a module in the current scope Anton Shepelev <anton.txt@g{oogle}mail.com> - 2021-03-19 18:11 +0300
Re: Exposing a module in the current scope Anton Shepelev <anton.txt@g{oogle}mail.com> - 2021-03-19 19:08 +0300
Re: Exposing a module in the current scope "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-19 10:51 -0700
Re: Exposing a module in the current scope Anton Shepelev <anton.txt@gmail.com> - 2021-03-20 13:32 +0300
Re: Exposing a module in the current scope "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-20 09:53 -0700
Re: Exposing a module in the current scope "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-19 10:47 -0700
Re: Exposing a module in the current scope Anton Shepelev <anton.txt@gmail.com> - 2021-03-20 13:51 +0300
Re: Exposing a module in the current scope "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-20 09:59 -0700
Re: Exposing a module in the current scope Anton Shepelev <anton.txt@g{oogle}mail.com> - 2021-03-24 20:43 +0300
Re: Exposing a module in the current scope Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-03-22 21:14 +0100
Re: Exposing a module in the current scope "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-22 16:00 -0700
Re: Exposing a module in the current scope Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-03-23 01:11 +0100
Re: Exposing a module in the current scope Anton Shepelev <anton.txt@gmail.com> - 2021-04-04 00:31 +0300
Re: Exposing a module in the current scope "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-18 11:30 -0700
Re: Exposing a module in the current scope Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-03-22 21:05 +0100
Re: Exposing a module in the current scope Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-03-23 01:00 +0100
Re: Exposing a module in the current scope Anton Shepelev <anton.txt@g{oogle}mail.com> - 2021-03-23 20:06 +0300
Re: Exposing a module in the current scope Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-03-25 20:04 +0100
Re: Exposing a module in the current scope John G Harris <niam@jghnorth.org.uk.invalid> - 2021-03-26 08:32 +0000
Re: Exposing a module in the current scope John G Harris <niam@jghnorth.org.uk.invalid> - 2021-03-26 08:48 +0000
Re: Exposing a module in the current scope Anton Shepelev <anton.txt@g{oogle}mail.com> - 2021-04-13 18:49 +0300
csiph-web