2016-12-13 61 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