function shouldBe(actual, expected) { if (actual !== expected) throw new Error('bad value: ' + actual); } { let source = { get x() { delete this.y; return 42; }, y: 42 }; let result = Object.assign({}, source); shouldBe(result.x, 42); shouldBe(result.hasOwnProperty('y'), false); } { let source = { get x() { return 42; }, y: 42 }; var store = 0; let target = { set x(value) { store = value; delete source.y; }, get x() { return store; }, }; let result = Object.assign(target, source); shouldBe(result.x, 42); shouldBe(result.hasOwnProperty('y'), false); } { let source = { get x() { Object.defineProperty(source, 'y', { enumerable: false }); return 42; }, y: 42 }; let result = Object.assign({}, source); shouldBe(result.x, 42); shouldBe(result.hasOwnProperty('y'), false); } { let source = { get x() { return 42; }, y: 42 }; var store = 0; let target = { set x(value) { store = value; Object.defineProperty(source, 'y', { enumerable: false }); }, get x() { return store; }, }; let result = Object.assign(target, source); shouldBe(result.x, 42); shouldBe(result.hasOwnProperty('y'), false); }