Tengo esta cadena de métodos.
MyObject.methodA().methodB().methodC()Supongamos que quiero que se agregue o cambie methodB() según alguna condición:
const inclueMethodB = false; // change method based on condition MyObject.methodA().(inclueMethodB ? methodB() : method123()).methodC() // add method based on condition MyObject.methodA().(inclueMethodB && methodB()).methodC()¿Hay alguna manera de hacer esto en javascript?
No puedo pensar en una manera de llamar opcionalmente a un método como ese.
Si estuviera eligiendo entre dos métodos, podría usar un subíndice donde el nombre del método se especifica dinámicamente:
MyObject.methodA()[includeB1 ? "methodB1" : "methodB2"]().methodC() Podría lograr su objetivo original definiendo un método que no haga nada excepto devolver lo mismo que methodB() . Si esta es una interfaz fluida donde todos los métodos solo devuelven this , podría ser:
doNothing() { return this; }Entonces podrías escribir:
MyObject.methodA()[includeB ? "methodB" : "doNothing"]().methodC() Pero todo esto parece innecesariamente complejo y confuso. Simplemente use sentencias if ordinarias, que expresen la intención claramente:
let temp = MyObject.methodA(); if (includeB) { temp = temp.methodB(); } temp.methodC();