Immaginiamo una funzione come questa:
function foo(x) { x += '+'; return x; }
L’uso di esso sarebbe come:
var x, y; x = 'Notepad'; y = foo(x); console.log(y); // Prints 'Notepad+'.
Sto cercando un modo per creare una funzione che sia concatenabile con altre funzioni.
Immagina l’uso:
var x, y; x = 'Notepad'; y = x.foo().foo().toUpperCase(); // Prints 'NOTEPAD++'. console.log(y);
Come lo farei?
Certo, il trucco è restituire l’object una volta che hai finito di modificarlo:
String.prototype.foo = function() { return this + "+"; } var str = "Notepad"; console.log(str.foo().foo().toUpperCase());
http://jsfiddle.net/Xeon06/vyFek/
Per rendere il metodo disponibile su String
, sto modificando il suo prototipo. Fare attenzione a non farlo su Object
, poiché può causare problemi durante l’enumerazione delle proprietà.
Se ricordo bene, puoi usare “questo” come contesto di una funzione (object a cui appartiene) e restituirlo per rendere la funzione concatenabile. In altre parole:
var obj = { f1: function() { ...do something...; return this;}, f2: function() { ...do something...; return this;} }
quindi puoi concatenare le chiamate come obj.f1().f2()
Tieni presente che non sarai in grado di ottenere ciò che ti aspetti chiamando obj.f1 (). ToUpperCase () – eseguirà f1 (), restituirà “this” e proverà a chiamare obj.toUpperCase ().