Run this code in the console in Safari (15.1) and another browser (eg. Brave/Chrome):
const a = {b: {c: 5}}
Object.defineProperty(a.b, 'self', {get () {return this}})
console.log(a.b.self) // expected: {c: 5}
console.log(a) // when expanding a.b.self in inspector, expects the same, ie. {c: 5}
Then, expand the last object, until you get self: (...)
, now, expanding it should be equivalent to running a.b.self
? It is in Brave, but I get the a
object in Safari.
Hypothesis: Safari devtools has a bug where it uses the object logged, and not the prop parent, as this
.
Or is this UB and I’ve gotten something wrong?