non-function-getters.js (720B)
1 with ({}) {} 2 3 function makeObjWithFunctionGetter(n) { 4 var o = {}; 5 Object.defineProperty(o, "x", { 6 get() { return n; } 7 }); 8 9 return o; 10 } 11 12 function makeObjWithProxyGetter() { 13 var inner = () => "proxy"; 14 var proxy = new Proxy(inner, {}); 15 16 var o = {}; 17 Object.defineProperty(o, "x", { 18 get: proxy 19 }); 20 return o; 21 } 22 23 function makeObjWithBoundGetter() { 24 var inner = () => "bound";; 25 var bound = inner.bind({}); 26 27 var o = {}; 28 Object.defineProperty(o, "x", { 29 get: bound 30 }); 31 return o; 32 } 33 34 function foo(o) { return o.x; } 35 36 for (var i = 0; i < 100; i++) { 37 foo(makeObjWithFunctionGetter(i)); 38 } 39 40 assertEq(foo(makeObjWithProxyGetter()), "proxy"); 41 assertEq(foo(makeObjWithBoundGetter()), "bound");