// Copyright 2017 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. const obj = {}; Object.defineProperty(obj, 'value', { enumerable: true, configurable: true, get: assertUnreachable, set: assertUnreachable, }); let called_get = false; let called_has = false; let called_set = false; const has = function(target, prop) { assertEquals('value', prop); called_has = true; return false; // Need to return false to trigger GetOwnProperty call. }; const get = function(target, prop) { assertEquals('value', prop); called_get = true; return 'yep'; }; const set = function(target, prop, value) { assertEquals('value', prop); called_set = true; return true; // Need to return true to trigger GetOwnProperty call. }; const proxy = new Proxy(obj, { has, get, set }); assertFalse(Reflect.has(proxy, 'value')); assertTrue(called_has); assertEquals('nope', proxy.value = 'nope'); assertTrue(called_set); assertEquals('yep', proxy.value); assertTrue(called_get);