Arrow functions have no this of their own; they capture this lexically from the enclosing scope at definition time. An arrow used as an object method does NOT get the object as this. Instead it inherits the surrounding scope, which at the top level of an ES module is undefined. This is exactly why arrows are the wrong choice for object methods that need to reference the object via this.