TL;DR
new F new.target F, F , new.target . .
, , . . :
: new.target.prototype. 5 .
: new F() new.target F (. ). ...
new Foo()
, new.target - Foo, Foo.prototype.
new Bound()
. new.target Bound. , 5 [[Construct]] : new.target , , Foo. , Foo.prototype .
new PFoo()
new.target PFoo, Foo, , PFoo.prototype Foo.prototype, .
new PBound()
new.target PBound. , [[Construct]] , new.target , , PBound.prototype, Bound.prototype. ...
function Foo() { }
Foo.prototype.iAm = 'Foo'
const Bound = Foo.bind(42)
Bound.prototype = {iAm: 'Bound'}
const Proxied = new Proxy(Bound, { })
console.log(new Proxied().iAm)
Hide result: , new.target , , . , , - new.target - . , , , , .