|
|
|
|
|
by esprehn
1355 days ago
|
|
That's not magic, it's just how property getter and setters work on the global: <script>
var _value = "test value";
Object.defineProperty(window, "testName", {
get: () => _value,
set: (value) => { _value = String(value) },
});
</script>
<script>
var testName = {};
// prints [object Object] string
console.log(testName, typeof testName);
var name = {};
// prints [object Object] string
console.log(name, typeof name);
</script>
the `var` doesn't create a new property since the getter and setter already exist.Other properties have the same behavior, for example `status`. Note: there's also LegacyUnforgeable which has similar behavior: https://webidl.spec.whatwg.org/#LegacyUnforgeable Even if you're not using modules, using an IIFE avoids all this by making your variables local instead of having them define/update properties on the global. |
|