2016-12-13 31 views
2

参数给出阅读从构造函数调用

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

可以返回给定的参数?

anInstance./* some method */ === [{ a: 'path' }] 

// or 

someWrapper(anInstance) === [{ a: 'path' }] 

限制:

  1. 你不能改变内部实行Plugin:当作外部依赖。
  2. Plugin可能有多个参数,任何类型。
  3. 不能分配初始参数的外部变量,就像这样:

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

背景:我试图写一个的WebPack插件配置测试。例如:

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

我想测试给定给DllPlugin的配置。上面的限制#3是因为我不想为每个插件导出配置时,该导出的唯一使用者将是我的测试。

如果没有办法做我最初的问题,那么我将不得不添加这些出口,因为我想不出任何其他方式来访问这些参数。

回答

0

您可以定义一个class,使用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());

+0

我将不得不为每个类做到这一点?例如,如果我有'Plugin'和'Plugin2',我需要'getPluginArgs'和'getPluginArgs2'? – neezer

+0

@neezer如果功能不同,是的。 'Plugin'与'Plugin2'不同,是吗?你可能可能创建一个函数,你可以传递函数引用来创建和扩展'class'来执行这个过程。 – guest271314

+0

@neezer参见[Classes](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes) – guest271314