2016-09-19 67 views
0

有没有办法摆脱就行了这个关键字:调用与工厂函数上相同的组成功能的其他功能

this.getOscillatorConfig(oscNumber); 

下面?:

const oscPlayer = (audioContext, voiceConfig) => ({ 

    getOscillatorConfig(oscNumber) 
    { 
     return voiceConfig.oscillators[oscNumber]; 
    }, 

    getOscillator(oscNumber) 
    { 
     this.getOscillatorConfig(oscNumber); 

     let vco = audioContext.createOscillator(); 
     vco.type = oscConfig.waveform; 

     return vco; 
    }, 

    start: (vco, time, noteLength, frequency) => { 

     vco.frequency.value = frequency; 

     vco.start(time); 
     vco.stop(time + noteLength); 
    } 

}); 

const octave =() => ({ 
     applyPipeLength: (frequency, pipeLength) => { 
     return frequency/(parseInt(pipeLength, 10)/8); 
    } 
}); 

const Voice = (audioContext, voiceConfig) => { 

    return Object.assign(
     {}, 
     oscPlayer(audioContext, voiceConfig), 
     octave() 
    ) 
} 

如果我不去使用它,我有getOscillatorConfig是未定义的。

或其他任何建议如何构造这?

+1

_“是有办法......”为什么_你想摆脱'this'吗? – Cerbrus

回答

1

为了能够省略this,你必须创建一个名称getOscillatorConfig的功能你要称呼它是在范围可供选择:

const oscPlayer = (audioContext, voiceConfig) => { 

    function getOscillatorConfig(oscNumber) { 
     return voiceConfig.oscillators[oscNumber]; 
    } 

    return { 
     getOscillator(oscNumber) { 
      getOscillatorConfig(oscNumber); 

      let vco = audioContext.createOscillator(); 
      vco.type = oscConfig.waveform; 

      return vco; 
     }, 

     start(vco, time, noteLength, frequency) { 
      // ... 
     } 
    }; 
};