private-field-destructuring.js (800B)
1 function assertThrows(fun, errorType) { 2 try { 3 fun(); 4 throw 'Expected error, but none was thrown'; 5 } catch (e) { 6 if (!(e instanceof errorType)) { 7 throw 'Wrong error type thrown'; 8 } 9 } 10 } 11 12 class A { 13 #a; 14 #b; 15 #c; 16 #d; 17 #e; 18 static destructure(o, x) { 19 [o.#a, o.#b, o.#c, o.#d, ...o.#e] = x; 20 } 21 22 static get(o) { 23 return {a: o.#a, b: o.#b, c: o.#c, d: o.#d, e: o.#e}; 24 } 25 }; 26 27 for (var i = 0; i < 1000; i++) { 28 var a = new A(); 29 A.destructure(a, [1, 2, 3, 4, 5]); 30 var res = A.get(a); 31 assertEq(res.a, 1); 32 assertEq(res.b, 2); 33 assertEq(res.c, 3); 34 assertEq(res.d, 4); 35 assertEq(res.e.length, 1); 36 assertEq(res.e[0], 5); 37 38 var obj = {}; 39 assertThrows(() => A.destructure(obj, [1, 2, 3, 4, 5]), TypeError); 40 assertThrows(() => A.get(obj), TypeError); 41 }