javascript / expert
Snippet
Metaprogrammierung mit Reflect.construct
Reflect.construct ermöglicht es Ihnen, einen Konstruktor aufzurufen, während Sie ein anderes 'new.target' angeben. Dies ist wichtig für fortgeschrittene Vererbungsszenarien und Proxy-basierte Factory-Muster, bei denen das Objekt vom Prototyp einer Klasse erben muss, während es vom Konstruktor einer anderen initialisiert wird.
snippet.js
1
2
3
4
5
6
7
8
class Base { constructor() { console.log(new.target.name); } }class Extended {}// Create an instance of Base, but with Extended as the new.targetconst instance = Reflect.construct(Base, [], Extended);console.log(instance instanceof Base); // trueconsole.log(instance instanceof Extended); // true
nodejs
Erklärung
1
Reflect.construct(Base, [], Extended);
Ruft den Konstruktor von Base auf, setzt aber den Prototyp des neuen Objekts auf Extended.prototype.
2
new.target.name
Im Konstruktor bezieht sich new.target auf das dritte Argument, das an Reflect.construct übergeben wurde.