使用Factory函数在同一组合函数上调用另一个函数

时间:2016-09-19 11:30:27

标签: javascript

有没有办法摆脱这一行上的this关键字:

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 个答案:

答案 0 :(得分: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) {
            // ...
        }
    };
};