trap-is-undefined-target-is-proxy.js (1227B)
1 // Copyright (C) 2020 Alexey Shvayka. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 4 /*--- 5 esid: sec-proxy-object-internal-methods-and-internal-slots-isextensible 6 description: > 7 If "isExtensible" trap is null or undefined, [[IsExtensible]] call is 8 properly forwarded to [[ProxyTarget]] (which is also a Proxy object). 9 info: | 10 [[IsExtensible]] ( ) 11 12 [...] 13 4. Let target be O.[[ProxyTarget]]. 14 5. Let trap be ? GetMethod(handler, "isExtensible"). 15 6. If trap is undefined, then 16 a. Return ? IsExtensible(target). 17 18 IsExtensible ( O ) 19 20 1. Assert: Type(O) is Object. 21 2. Return ? O.[[IsExtensible]](). 22 23 [[IsExtensible]] ( ) 24 25 [...] 26 7. Let booleanTrapResult be ! ToBoolean(? Call(trap, handler, « target »)). 27 [...] 28 10. Return booleanTrapResult. 29 features: [Proxy] 30 ---*/ 31 32 var array = []; 33 var arrayExtensible = true; 34 var arrayTarget = new Proxy(array, { 35 isExtensible: function() { 36 return arrayExtensible; 37 }, 38 }); 39 40 var arrayProxy = new Proxy(arrayTarget, { 41 isExtensible: undefined, 42 }); 43 44 assert(Object.isExtensible(arrayProxy)); 45 46 Object.preventExtensions(array); 47 arrayExtensible = false; 48 49 assert(!Object.isExtensible(arrayProxy)); 50 51 reportCompare(0, 0);