Lisez les arguments de l'appel du constructeur

Donné

const anInstance = new Plugin({ a: 'path' }) 

Pouvez-vous renvoyer les arguments donnés?

 anInstance./* some method */ === [{ a: 'path' }] // or someWrapper(anInstance) === [{ a: 'path' }] 

Restrictions:

  1. Vous ne pouvez pas modifier l'implémentation interne de Plugin : traiter comme une dépendance externe.
  2. Plugin peut avoir plus d'un argument, de n'importe quel type.
  3. Vous ne pouvez pas attribuer les arguments initiaux à une variable externe, de la manière suivante:

     const config = { a: 'path' } const anInstance = new Plugin(config) 

Contexte : J'essaie d'écrire un test pour une configuration de plug-in sur le pack. Par exemple:

 module.exports = { plugins: [ new wepback.DllPlugin({ name: '[name]', path: path.join(buildDir, '[name].json'), }) ] } 

Je souhaite tester la configuration donnée au DllPlugin. La restriction n ° 3 ci-dessus est là parce que je ne veux pas avoir à exporter la configuration pour chaque plugin lorsque le seul consommateur de cette exportation serait mon test.

S'il n'y a aucun moyen de faire ma demande initiale, je devrai ajouter ces exportations, car je ne peux penser à aucune autre façon d'accéder à ces arguments.

Vous pouvez définir une class , utiliser extend

 function Plugin() {} class getPluginArgs extends Plugin { constructor(...args) { super(); this.args = args; for (let arg of args) { console.log(arg) } } getArgs() { return this.args; } } const anInstance = new getPluginArgs({ a: "path" }); console.log(anInstance instanceof Plugin, anInstance.getArgs());