How to get a reference to the global object
There is no standard named binding for the global object in ECMAScript, so scripts access it using various idioms. Since Duktape 2.1 an explicit global
binding is available, based on https://github.com/tc39/proposal-global.
The following snippet provides easy (if cryptic) access to the global object from any context: global (program) code, eval code, and function code, regardless of whether the context is strict or not:
var globalObject = new Function('return this;')();
Because global
is likely to be standardized, the following polyfill may be preferable (https://github.com/svaarala/duktape/blob/master/polyfills/global.js):
if (typeof global === 'undefined') {
(function () {
var global = new Function('return this;')();
Object.defineProperty(global, 'global', {
value: global,
writable: true,
enumerable: false,
configurable: true
});
})();
}
The new Function(...)
creates a new function with its body given as an argument. Unlike most other contexts, the strictness of the surrounding code is not inherited so that this
gets consistently bound to the global object as the function created is not strict.