You don't need JSON.parse there - see `Object.getPrototypeOf({ ['__proto__']: null }) !== null`.
On Wed, Sep 26, 2018 at 10:27 AM, Mike Samuel <mikesam...@gmail.com> wrote: > Might it be a spec bug that in the below, o's prototype changes, and o.x > !== b.x? > > const a = makeIntercepter(); > const b = { x: 1 }; > const o = Object.assign( > {}, > a, > b); > > console.log(`o is plain Object: ${ Object.getPrototypeOf(o) === > Object.prototype }`); > > console.log(`b.x=${ b.x }, o.x=${ o.x }`); > > function makeIntercepter() { > return JSON.parse( > // Get an object that has an actual "__proto__" property. > '{ "__proto__": {} }', > // Replace the __proto__ property's value with one that > // traps assignment to x. > (key, value) => ( > (key === '__proto__') > ? { > set x(v) { > console.log(`intercepted ${ v }`); > }, > get x() { > return 2; > }, > } > : value)); > } > > In modern Chrome, Firefox, Safari I get > intercepted 1 > getPrototypeOf(o)===Object.prototype: false > b.x=1, o.x=2 > > > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss > >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss