w3schools - tipos de funciones en javascript
¿Cómo hacer funcionar una función en JavaScript? (2)
Imaginemos una función como esta:
function foo(x) {
x += ''+'';
return x;
}
Su uso sería como:
var x, y;
x = ''Notepad'';
y = foo(x);
console.log(y); // Prints ''Notepad+''.
Estoy buscando una manera de crear una función que sea posible con otras funciones.
Imagina el uso:
var x, y;
x = ''Notepad'';
y = x.foo().foo().toUpperCase(); // Prints ''NOTEPAD++''.
console.log(y);
¿Cómo haría esto?
Claro, el truco es devolver el objeto una vez que hayas terminado de modificarlo:
String.prototype.foo = function() {
return this + "+";
}
var str = "Notepad";
console.log(str.foo().foo().toUpperCase());
http://jsfiddle.net/Xeon06/vyFek/
Para que el método esté disponible en String
, estoy modificando su prototipo. Sin embargo, tenga cuidado de no hacer esto en Object
, ya que puede causar problemas al enumerar sus propiedades.
Si recuerdo correctamente, puede usar "esto" como contexto de una función (objeto al que pertenece) y devolverla para que la función sea chainable. En otras palabras:
var obj =
{
f1: function() { ...do something...; return this;},
f2: function() { ...do something...; return this;}
}
entonces puede encadenar las llamadas como obj.f1().f2()
Tenga en cuenta que no podrá lograr lo que espera llamando a obj.f1 (). ToUpperCase (): ejecutará f1 (), devolverá "this" e intentará llamar a obj.toUpperCase ().