使用Factory函数调用相同组合函数的另一个函数

Calling another function on same composed function with Factory functions

本文关键字:函数 另一个 组合 Factory 函数调用 使用      更新时间:2023-09-26

是否有办法摆脱这个关键字的行:

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 is undefined

或者其他关于如何构建这个的建议吗?

为了能够省略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) {
            // ...
        }
    };
};