Solucio sobrecarrega de funcions

De wikiserver
La revisió el 06:23, 10 nov 2013 per Asalinas (Discussió | contribucions) (Es crea la pàgina amb «<pre> function afegirMetode(objecte, nom, funcio){ var old = objecte[nom]; objecte[nom] = function(){ if(funcio.length == arguments.length) return funcio.appl…».)
(dif) ← Versió més antiga | Versió actual (dif) | Versió més nova → (dif)
Dreceres ràpides: navegació, cerca
function afegirMetode(objecte, nom, funcio){
	var old = objecte[nom];
	objecte[nom] = function(){
				if(funcio.length == arguments.length)	
					return funcio.apply(this, arguments);
				else if (typeof old == 'function')
					return old.apply(this, arguments);
		};
}

var usuaris = {
       noms : ["joan garcia", "jaume pontons", "ana riu", "marta aran", "alex fornell", "mariona cots"]
	};

// afegim funció sense paràmetres
afegirMetode(usuaris, "trobar", function(){ return this.noms; } );

//afegir funció amb 1 paràmetre
afegirMetode(usuaris, "trobar", function (cadena){
		var ret = [];
		for(var i = 0; i < this.noms.length; i++)
			if(this.noms[i].indexOf(cadena) == 0)	
				ret.push(this.noms[i]);
		return ret;		
});

//afegir funció amb 2 paràmetres
afegirMetode(usuaris, "trobar", function(nom, cognom){
	var ret = [];
	for(var i = 0; i < this.noms.length; i++)
		if(this.noms[i]  == (nom + " " + cognom))
			ret.push(this.noms[i]);
	return ret;			
});

//prova-ho:

alert("Crida a la funcio sense parametres: \n " + usuaris.trobar());
alert("Crida a la funcio amb el parametre 'a': \n " + usuaris.trobar('a'));
alert("Crida a la funcio amb els parametres 'jaume' i 'pontons': \n " + usuaris.trobar('jaume','pontons'));