function assert(b) { if (!b) throw new Error("Bad assertion"); } function test(f) { for (let i = 0; i < 1000; i++) f(); } let constructors = [Error, String, RegExp, function() {}, class C {}]; for (let constructor of constructors) { test(function() { let proxy = new Proxy(constructor, {}); assert(new constructor instanceof proxy); }); } test(function() { let called = false; let proxy = new Proxy(function(){ called = true; }, {}); assert(new proxy instanceof proxy); assert(called); }); test(function() { let called = false; let handler = { get: function(target, prop) { if (prop === "prototype") return {}; return target[prop]; } }; let proxy = new Proxy(function(){ called = true; }, handler); assert(!(new proxy instanceof proxy)); assert(called); });