Diferència entre revisions de la pàgina «M06 UF1A3. Teoria»

De wikijoan
Salta a la navegació Salta a la cerca
m
Línia 55: Línia 55:
 
console.log(cad.desordenar())
 
console.log(cad.desordenar())
 
</pre>
 
</pre>
 +
==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:
 +
 +
<pre>
 +
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;
 +
}
 +
</pre>
 
{{Autor}}, octubre 2021
 
{{Autor}}, octubre 2021

Revisió del 15:49, 28 oct 2021

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