Estoy trabajando en tres cuadros de texto que obtienen datos y los muestran en un menú desplegable de autocompletado de jQuery. Dado que JavaScript es bastante flexible con sus objetos y no tiene interfaces. Hice un objeto de llamada API que luego toma un objeto de funciones que se propaga en sí mismo.
export function ApiCall(baseUrl, domain, path, options = {}) { return { baseUrl: baseUrl, domain: domain, path: path, getData: function () { return $.ajax({ url: this.fullUrl, dataType: "json", data: this.data, success: function(data) { return data } }); }, ...options } }Esto me permitió deshacerme de la mayoría de los bloques if ya que ya no tenía que verificar las ID de html. Sin embargo, me he encontrado con dos problemas con esto. Algunos de los objetos necesitan tener una función vacía que no haga nada, mientras que otros tienen esa función para hacer algo.
addError: function () { addError(this.title) },y otros
addError: () => { }Esto está creciendo un poco y me preocupa que los objetos puedan tener algunos implantándolos y otros no. Tal como está ahora, el código funciona muy bien y ha aclarado muchos bloques if que hacen cosas diferentes según el ID de html que se pasa y simplemente ejecuta la función en el objeto. ¿Es esto válido? ¿Alguna forma mejor de implementar esto? ¿Alguna forma de aclarar esto para que sea más legible y menos confuso?
Sí, las funciones no operativas se encuentran ocasionalmente y, a veces, no hay forma de evitarlas. Pero por lo general tiene más sentido si, en lugar de escribir funciones no operativas, puede omitir la función por completo.
Si hay un código que no está bajo su control que llama incondicionalmente a una propiedad de un objeto, pero no quiere que ocurra nada cuando eso suceda, entonces las funciones no operativas son su única opción.
Pero si el código que usa el objeto está bajo su control, encontrará que su código será significativamente más delgado si comprueba que la propiedad existe antes de llamarlo. Por ejemplo, si, dado un objeto, desea llamar a addError si esa propiedad existe, puede hacer lo siguiente:
obj.addError?.();lo que le permite evitar tener que hacer
addError: () => { }En todas partes.
Si tiene que usar funciones no operativas en su lugar, es un poco desafortunado (en mi opinión), pero no es un gran problema.