function assert(b) { | |
if (!b) | |
throw new Error("Bad assertion") | |
} | |
function test1() { | |
let boundFunction = function () {}.bind(); | |
Object.defineProperty(boundFunction, "prototype", { | |
get() { | |
throw Error("Hello"); | |
} | |
}); | |
let threw = false; | |
try { | |
Reflect.construct(function() {}, [], boundFunction); | |
} catch(e) { | |
threw = true; | |
assert(e.message === "Hello"); | |
} | |
assert(threw); | |
} | |
test1(); | |
function test2() { | |
let boundFunction = function () {}.bind(); | |
let counter = 0; | |
Object.defineProperty(boundFunction, "prototype", { | |
get() { | |
++counter; | |
return {}; | |
} | |
}); | |
const iters = 1000; | |
for (let i = 0; i < iters; ++i) | |
Reflect.construct(function() {}, [], boundFunction); | |
assert(counter === iters); | |
} | |
test2(); |