recorrer objetos objeto metodos lista eliminar elemento buscar array agregar javascript object method-chaining

objetos - Método del objeto JavaScript Encadenamiento: útil?



recorrer array de objetos javascript (9)

A todos los niños les encanta el encadenamiento. Sin embargo, en mi experiencia, debe usarse con cuidado ya que puede disminuir la legibilidad del código. En otras palabras, haga lo que tenga sentido para usted y pueda ser comprendido fácilmente por otros programadores que tienen una familiaridad básica con el concepto.

Entonces ... jugando con JavaScript con una idea que es nueva para mí, que los métodos de un objeto devuelvan el objeto del que son métodos; esto lleva a la encadenamiento. Mi pregunta, entonces: ¿cómo puede esto ser útil? Tiré esto juntos para probar el funcionamiento fundamental:

<script> MathChain = function() { this.pass = function() { this.multiply = eval(arguments.join(''*'')); this.add = eval(arguments.join(''+'')); return this; } } m = new MathChain().pass(5, 10, 20).multiply; // 1000 a = new MathChain().pass(5, 10, 20).add; // 35 </script>

Obviamente, esa no es una instancia viciosamente eficiente en la que uno usaría este concepto, así que ¿podría indicarme algo que lo haga correctamente (aparte de jQuery, por favor)?


Bueno, aquí hay un ejemplo no muy aplicable al mundo real, pero creo que obtendrás la idea. Si le permite realizar una serie de operaciones diferentes en un objeto, y proporciona comodidad.

var truck = function() { this.turnLeft = function { // turn left return this; } this.turnRight = function { // turn right return this; } this.goReallyFast = function { // go fast! return this; } }; // My get-away plan var myTruck = new truck(); myTruck.turnLeft().turnRight().goReallyFast();


El encadenamiento de JavaScript puede ser muy útil si desea realizar una serie de acciones en un solo objeto. Estoy de acuerdo con Michael Luton a continuación, el encadenamiento debe manejarse con cuidado. Si agrega uno o dos métodos encadenados a un objeto que todavía es legible. Si comienza a agregar cuatro, cinco o incluso nueve, entonces su código se vuelve más difícil no solo para leer sino para mantener.


En JavaScript, esto aparece todo el tiempo cuando se navega por el DOM. En particular, cuando trates de atravesar un montón de elementos que no tienen ID.

Por ejemplo, hubo una pregunta en SO sobre la búsqueda del primer elemento de una tabla . Puede involucrar muchos bucles o comandos encadenados.


Encontré esta pregunta mientras buscaba una solución general para hacer que los métodos fueran susceptibles de ser definidos, después de haberlos definido. Esto es lo que se me ocurrió. Soy un neófito de JavaScript; el comprador tenga cuidado.

makeChainable = function() { var receiver = arguments[0] for (var i = 1; i < arguments.length; i++) { functionName = arguments[i]; (function() { wrapped = receiver[functionName]; receiver[functionName] = function() { wrapped.apply(receiver, arguments); return receiver; } })(); } } daisy = { name: ''Daisy'', moo: function() { console.log(this.name + " moos!") } } makeChainable(daisy, ''moo''); daisy.moo().moo().moo();



Para un ejemplo muy diferente (no OO), el encadenamiento es algo similar a las tuberías de Unix . Cada paso de una tubería Unix devuelve el contenido completo (modificado), adecuado para enviar al siguiente paso:

cat file1 file2 | sort -n | awk ''{print $2}'' | sed ''s/@/ at /g''



Un ejemplo en el que es útil es con una ligera variación en su problema: en lugar de devolver el mismo objeto, usted diseña el objeto para que sea inmutable . Luego, todas sus funciones devolverán una nueva instancia del mismo tipo, pero con las propiedades ya establecidas correctamente.

Esto tiene muchas aplicaciones prácticas, especialmente en el ámbito de la programación funcional.