ungap/global-this

new shorter version?

jimmywarting opened this issue · 2 comments

came up with this solution:

(f=>f().globalThis=f())({f(){return this}}.f)

haven't tested it much, I think it's safe to use...

  • shorter
  • don't modify any prototype
  • safe from CSP eval stuff

you know how if you do

var { getUserAgent } = navigator
getUserAgent()

you will get Illegal invocation error since getUserAgent loses it's context cuz you destructed it from the navigator.?

well, if you create an object and do the same thing who's function only return this

var foo = {
  fn () {
    return this
  }  
}

var fn = foo.fn
console.log(foo.fn()) // foo
console.log(fn()) // globalThis

then you might get away with my minified version of just doing this:

(f=>f().globalThis=f())({f(){return this}}.f)

nvm, don't work in strict mode

the prototype is modified and cleaned up right away, and since the current logic was suggested by a google employee with very high attention to details and performance, I think there's no reason to change the script as is.

It's also already safe for CSP, and its size irrelevant compared to the rest of the JS shipped with average websites so, thanks for trying, but I think this module is "done" as it is ;-)