M06 UF1A3. Teoria

De wikijoan
Salta a la navegació Salta a la cerca

Scripts de classe

T11. Treballar amb objectes

T12. Repàs de prototype

prototype és una propietat dels objectes String, Number, Date, Array, RegExp,... que ens permet definir un nou mètode a aquests objectes.

Ex 1. L'objecte Array no té un mètode per fer shuffle (desordenar). Tenim la següent funció que fa la feina:

function shuffle(array) {
  let currentIndex = array.length,  randomIndex;

  // While there remain elements to shuffle...
  while (currentIndex != 0) {

    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex--;

    // And swap it with the current element.
    [array[currentIndex], array[randomIndex]] = [
      array[randomIndex], array[currentIndex]];
  }

  return array;
}

// Used like so
var arr = [2, 11, 37, 42];
shuffle(arr);
console.log(arr);

A partir d'aquesta funció, creem el mètode desordenar() dels Array.

Array.prototype.desordenar = function() { return shuffle(this) }

Comprovem que funciona:

var arr = ['a','b','c','d'];
console.log(arr.desordenar());

Ex 2. Ara que ja sabem desordenar arrays, ara desordenarem strings, aprofitant que ja sabem desordenar arrays:

String.prototype.desordenar = function() {
	var arr=this.split("");
	arr.desordenar();
	return arr.join("");
}

Per exemple, anem a crear el mètode desordenar() que desordeni els caràcters d'una cadena, de forma aleatòria

var cad = "supercalifragilisticoespialidoso";

console.log(cad.desordenar())

Propietat constructor dels objectes

Si anem a la referència dels Strings (https://www.w3schools.com/jsref/jsref_obj_string.asp) veiem que hi ha tres propietats:

  • length (la més important)
  • prototype (ja l'he vist)
  • constructor: per a què serveix aquesta propietat? Serveix per a accedir a la definició de la funció constructora (en format cadena).

Anem a veure un exemple de constructor amb un objecte genèric:

function displayMoto() {
   var result = `Una bonica ${this.make} ${this.model} del ${this.year}`;
   return result;
 }

function Moto(make, model, year, owner) {
   this.make = make;
   this.model = model;
   this.year = year;
   this.owner = owner;
   this.displayMoto = displayMoto;
}

var moto1 = new Moto('honda','500','pep');

console.log(moto1.constructor); //no ens mostra tota la cadena
[Function: Moto]

console.log('funció constructora: ' + moto1.constructor); //ho hem de fer així
funció constructora: function Moto(make, model, year, owner) {
  this.make = make;
  this.model = model;
  this.year = year;
  this.owner = owner;
  this.displayMoto = displayMoto;
}

creat per Joan Quintana Compte, octubre 2021