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
[email protected]
https://mail.mozilla.org/listinfo/es-discuss