es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

JavaScript: Crea un método en una clave de un objeto si existe la entrada en la función principal.

Estoy intentando crear una variable del objeto Youtube que se simulará en un bucle for.

La idea es establecer una velocidad variable para cada clip en un bucle for. La idea es que YouTube tome un objeto como se describe aquí. Esto parece difícil.

Creé la función aquí:

function YTObjects(videoId1, ...args) {
  let object1 = {
    height: "315",
    width: "560",
    videoId: videoId1,
    playerVars: {
      autoplay: 0,
      loop: 1,
      ...(typeof args[0] !== "undefined" && { start: `${args[0]}` }),
      ...(typeof args[1] !== "undefined" && { end: `${args[1]}` }),
    },
    if ((typeof args[2] !== "undefined") && (typeof args[3] !== "undefined")) {
      event: function (args[2], args[3]) {
        player.setPlaybackRate(args[2]*args[3]);
      },
    }
  };
  return object1;
}

Lo cual me permite crear una variable objeto. Pero no estoy logrando crear una función en una clave que depende de los argumentos (2 y 3).

¿Puede ayudarme en este sentido, por favor?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear una función en una llave del objeto Youtube que depende de argumentos, puedes usar una función de devolución de llamada. La función de devolución de llamada puede tomar argumentos como parámetros y luego pasarse como valor a la llave que la necesita. Aquí tienes un ejemplo:

    function setPlaybackRate(velocidad) {
      player.setPlaybackRate(velocidad);
    }
    
    function YTObjects(videoId1, ...args) {
      let object1 = {
        height: "315",
        width: "560",
        videoId: videoId1,
        playerVars: {
          autoplay: 0,
          loop: 1,
          ...(typeof args[0] !== "undefined" && { start: `${args[0]}` }),
          ...(typeof args[1] !== "undefined" && { end: `${args[1]}` }),
        },
        setSpeed: (typeof args[2] !== "undefined" && typeof args[3] !== "undefined") ? function() {
            return setPlaybackRate(args[2]*args[3]);
          } : null
      };
      return object1;
    }
    
    // Ejemplo de uso
    const yt1 = YTObjects('video1', 0, 10, 1, 2); // establece la velocidad en 2
    const yt2 = YTObjects('video2', 0, 10); // no se establece velocidad
    console.log(yt1.setSpeed); // espera una función
    console.log(yt2.setSpeed); // espera null
    

    En el ejemplo, se agrega la llave setSpeed al objeto Youtube. Si args[2] y args[3] están definidos, devuelve una función de devolución de llamada que establece la velocidad de reproducción en args[2]*args[3], de lo contrario devuelve null.

    Luego puedes usar estos objetos yt1 y yt2 en tu bucle for y establecer la velocidad de reproducción para cada clip según corresponda.

Comments are closed.