Escribí un proxy de HTMLAudioElement. Cuando llamo al método play() a través del proxy.
const proxy = new Proxy( audioPlayer, { get(target: typeof audioPlayer , prop, receiver) { return Reflect.get(target, prop, receiver); } }); proxy.play();Recibí un error:
TypeError: Failed to execute 'play' on 'HTMLMediaElement': Illegal invocation
Hasta donde yo sé, es porque la función de play no está vinculada al target . Sin embargo, ¿no debería el receiver de utilería hacer el enlace por nosotros? ¿O hay algo mal en mi código?
Luego, tengo que cambiar mi código como se muestra a continuación, parece extraño, pero funciona.
const proxy = new Proxy( audioPlayer, { get(target: typeof audioPlayer , prop, receiver) { if(prop=='play'){ return target.play.bind(target) }else if(prop=='pause'){ return target.pause.bind(target) } return Reflect.get(target, prop, receiver); } }); proxy.play();