![]() |
Índex |
Miguel A. Almarza
|
||||
|
|
Si tenim ja creat un objecte miCotxe amb les propietats Marca, Model i Any podem accedir a aquestes propietats de la manera següent:
miCotxe.Marca="Seat"
miCotxe.Model="Ibiza"
miCotxe.Any="2000"
En realitat les propietats d'un objecte són un vector de valors amb un nom de variable associat. De fet un array i un objecte en JavaScript són diferents interfaces per a una mateixa estructura interna de dades.
Així que podem accedir a les dades d'un objecte de la mateixa manera que a les de un vector.
Si volem veure en el navegador el valor de les propietats de miCotxe podem escriure
document.write(miCotxe["Marca"]);
document.write(miCotxe["Model"]);
document.write(miCotxe["Any"]);
A l'exemple següent veiem com podem fer ús de les propietats de l'objecte miCotxe per tal d'accedir als seus valors.
Exemples d'objecte | Visualització per pantalla |
<script>
function Cotxe(Marca, Model, Any) { this.Marca=Marca || ""; this.Model=Model || ""; this.Any=Any || ""; } miCotxe = new Cotxe(); miCotxe.Marca="Seat";
document.write(miCotxe["Marca"],"<br>");
function MostraPropietats(Objecte, NomObjecte)
MostraPropietats(miCotxe,"miCotxe");
|
Mitjançant la següent instrucció creem l'objecte Disquete1 amb les propietats Color i Títol que tenen els valors Vermell i Ús diari:
Disquete1 = {Color : "Vermell", Titol:"Us diari"};
És evident que entre les claus podem posar una llista de propietats i valors que assignem. Entre els elements de la llista podem afegir la creació d'un nou objecte i així creem un arbre d'objectes.
A la declaració següent fem l'objecte Disquete2 que té com a propietat l'objecte Característiques amb les propietats Capacitat i Mida.
Disquete2 = {Color:"Vermell", Titol:"Us diari", Caracteristiques:{Capacitat:"1.4", Mida:"Estandar"}};
Així per accedir ara a les propietats de l'objecte Caracteristiques hem de fer ús de la notació:
Disquete2.Caracteristiques.Capacitat
Exemples d'objecte creat amb inicialitzador | Visualització per pantalla |
<script>
Disquete1 = {Color : "Vermell", Titol:"Us diari"}; document.write("Color: ",Disquete1["Color"]);
Disquete2 = {Color:"Vermell", Titol:"Us diari", Caracteristiques:{Capacitat:"1.4", Mida:"Estandar"}}; document.write("Capacitat disquete 2: ", Disquete2.Caracteristiques.Capacitat);
|
La funció constructora ens permet declarar un nou tipus d'objecte i amb new podem crear tantes instàncies de l'objecte com siguin necessàries.
A l'exemple d'objecte hem creat un nou tipus d'objecte
amb la funció constructora Cotxe:
function Cotxe(Marca, Model, Any) { this.Marca=Marca || ""; this.Model=Model || ""; this.Any=Any || ""; }Després hem creat una instància d'aquest tipus d'objecte anomenada miCotxe amb la instrucció:
miCotxe = new Cotxe();Hem fet ús de la funció constructora sense passar-li paràmetres. Després hem assignat valor a les propietats amb les instruccions:
miCotxe.Marca="Seat"; miCotxe.Model="Ibiza" miCotxe.Any="2000";Podem fer aquest dos passos de creació i assignació a la mateixa instrucció fent:
miCotxe = new Cotxe("Seat", "Ibiza", "2000");Quan fem us del pas de paràmetres per a crear una instància de Cotxe el punter this, que en apunta a miCotxe, assigna els valors inicials a les propietats. Cas que no li passem paràmetres iniciazlitza a "".
Senyalem que podem posar com a propietats d'un objecte altres objectes, com ja hem comentat al punt anterior.
Aquest mètode ens permet crear instàncies diferents i serà el mètode més norma de crear objectes; també ens permetrà crear vectors d'objectes:
cotxeEmpresa = new Cotxe("Peugeot", "205", "2003");Per a definir una propietat, fins ara, hem donat un nom a aquesta propietat. També es pot definir fent ús d'un índex. Si hem definit una propietat per mitjà d'un nom ens hem de referir a ella amb el seu nom, si l'hem definida amb un índex llavors hem de referir-nos a ella amb l'índex utilitzat per definir-la.
En el cas de les propietats dels objectes d'una pàgina HTML, com els vectors de formularis de l'objecte document, ens podem referir de tres formes diferents:
document.forms[1] Pel segon formulari del document document.forms["miFormuari"] Pel seu nom document.miFormulari Pel seu nomNota.- Tots els objectes JavaScrip tenen la propietat prototype que permet afegir propietats en qualsevol moment a un tipus d'objecte. Afegint les línies següents a la funció constructora del tipus Cotxe obtenim per pantalla:
Afegint propietats a un tipus d'objecte | Visualització per pantalla |
Cotxe.prototype.color=null;
miCotxe.color="Vermell"; MostraPropietats(miCotxe,"miCotxe"); |
miCotxe.Marca = Seat
miCotxe.Model = Ibiza miCotxe.Any = 2000 miCotxe.color = Vermell |
Objecte.NombreMetode = NombreFuncioon hem donat el mètode NombreMetode a l'objecte Objecte am la funció NombreFunció .
Encara que podem assignar una funció a un mètode amb nombre diferent es normal donar el mateix nom a la propietat i a la funció.
A l'exemple següent afegim a l'objecte Cotxe el mètode que mostra les seves propietats MostraPropietats dins la funció constructora
this.MostraPropietats = MostraPropietats;Així podem fer ús d'aquest mètode amb la instrucció
miCotxe.MostraPropietats();Si ens fixem en el codi de la funció MostraPropietats veiem que es fa ús del punter this que es crida a la funció amb un objecte (miCotxe) apunta a les dades d'aquest objecte.
function MostraPropietats() { document.write("Marca: ", this.Marca, <br>"); document.write("Model: ", this.Model, <br>"); document.write("Color: ", this.Color, "<br>"); document.write("Any: ", this.Any, "<br>"); }
Exemple d'objecte complet, amb propietats i mètodes | Visualització per pantalla |
<script> function Cotxe(Marca, Model, Any, Color) { this.Marca=Marca || ""; this.Model=Model || ""; this.Any=Any || ""; this.Color = Color; this.MostraPropietats = MostraPropietats; } function MostraPropietats() { document.write("Marca: ", this.Marca, <br>"); document.write("Model: ", this.Model, <br>"); document.write("Color: ", this.Color, "<br>"); document.write("Any: ", this.Any, "<br>"); } miCotxe = new Cotxe("Seat","Ibiza","2000","Vermell"); miCotxe.MostraPropietats(); </script> |
Considerem l'arbre de la figura. Veiem que existeixen els objectes Vehicle,
Vterrestre, VtraccionMotor, VtraccionAnimal i VehiculoAereo. Les condicions
de propietats i mètodes d'aquest objectes són les següents.
Tipus objecte (Classe) | Propietats | Mètodes |
Vehiculo | Marca
Color Tipo |
ImprimeVehiculo |
Vterrestre | NumRuedas | ImprimeVTerrestre |
VtraccionMotor | CentimetrosCubicos | ImprimeVTMotor |
VtraccionAnimal | Animal | ImprimeVTAnimal |
VehiculoAereo | nAlas | ImprimeVAereo |
Així que hem de crear un arbre en el que l'objecte arrel és
l'objecte Vehicle. Aquest té dos fills, els objectes VTerrestre
i VehiculoAereo. L'objecte Vterrestre té també dos fills
que són els objectes VTraccionMotor y VTraccionAnimal.
Descripció objectes | Codificació dels objectes |
Objecte Vehiculo:
Com que aquest objecte és l'objecte arrel la seva funció constructora és igual que la explicada al paràgraf anterior. |
function Vehiculo(Marca, Color, Tipo) { this.Marca = Marca || ""; this.Color = Color || ""; this.Tipo = Tipo || ""; this.ImprimeVehiculo = ImprimeVehiculo }; function ImprimeVehiculo() { document.write("Marca: ",this.Marca,"<br>"); document.write("Color: ",this.Color,"<br>"); document.write("Tipo: ",this.Tipo,"<br>"); } |
Objecte Vterrestre:
En la funció constructora d'aquest objecte veiem les dues instruccions següents this.Padre = Vehiculo; this.Padre(Marca, Color, Tipo);Aquestes instruccions fan que els objectes de tipus Vterrestre heretin les propietats i els mètodes dels objectes Vehiculo. També és necessària la instrucció que tenim després de la funció: VTerrestre.prototype = Vehiculo;Fem notar que en el moment de cridar a la funció constructora de l'objecte Vehicle li passem els paràmetres adients de Marca, Color i Tipo. |
function VTerrestre(Marca, Color, nRuedas, Tipo) { this.NumRuedas = nRuedas || 0; this.Padre = Vehiculo; this.Padre(Marca, Color, Tipo); this.ImprimeVTerrestre = ImprimeVTerrestre; } VTerrestre.prototype = Vehiculo; function ImprimeVTerrestre() { this.ImprimeVehiculo(); document.write("Número de ruedas: ", this.NumRuedas,"<br>"); } |
Objecte VtraccionMotor:
Aquest objecte té una funció constructora que li fa ser fill de la classe Vterrestre la qual cosa li fa tenir totes les propietats de Vterrestre, incloent les de Vehicle ja que Vterrestre les tenia. Es a dir que VtraccionMotor hereta a Vterrestre que hereta de Vehicle. |
function VTraccionMotor(Marca, Color, nRuedas, CC, Tipo) { this.CentimetrosCubicos=CC || 0; this.Padre = VTerrestre; this.Padre(Marca, Color, nRuedas, Tipo); this.ImprimeVTMotor=ImprimeVTMotor; } VTraccionMotor.prototype = VTerrestre; function ImprimeVTMotor() { this.ImprimeVTerrestre(); document.write("C. Cubicos: ",this.CentimetrosCubicos,"<br>"); } |
Objecte VtraccioAnimal:
És un objecte que a l'arbre que estem construint es troba en el mateix nivell que VtraccionMotor i que té els mateixos antecessors. |
function VTraccionAnimal(Marca, Color, nRuedas, Animal, Tipo) { this.Animal=Animal; this.Padre = VTerrestre; this.Padre(Marca, Color, nRuedas, Tipo); this.ImprimeVTAnimal=ImprimeVTAnimal; } VTraccionAnimal.prototype = VTerrestre; function ImprimeVTAnimal() { this.ImprimeVTerrestre(); document.write("Animal: ",this.Animal,"<br>"); } |
Objecte VehiculoAereo:
Aquest objecte està en el nivell de l'objecte Vterrestre i hereta de l'objecte arrel Vehiculo. |
function VehiculoAereo(Marca, Color, nAlas, Tipo) { this.Padre = Vehiculo; this.Padre(Marca, Color, Tipo); this.nAlas = nAlas; this.ImprimeVAereo=ImprimeVAereo; } VehiculoAereo.prototype = Vehiculo; function ImprimeVAereo() { this.ImprimeVehiculo(); document.write("Numero Alas: ", this.nAlas) } |
Veiem que el mecanisme d'herència ens permet tenir objectes cada cop més específics de manera que els objectes fills afegeixen propietats i mètodes als que hereten dels antecessors.
Nota important: En JavaScript no existeix l'herència múltiple, és a dir que un objecte no pot tenir més d'un objecte pare.
Nota important: Recordem que els objectes tenen diferents propietats o mètodes segons tinguem el llenguatge JavaScript de Netscape o el del Internet explorer. Per aixó i d'aqui en endavant posarem només les propietats i mètodes comunes a tots dos models d'objectes.
Ja hem tractat aquest tema a l'apartat de vectors
del primer capítol on està explicat la forma de crear
objectes array, donar valor als seus elements i referir-se a les dades
d'aquest que tenim en els arrays. També s'explica com podem fer
arrays bi-demensionals
miVector.length
Mètodes de Array | Descripció | Ús |
Array.concat(Arg1,...,Argn) | Concatena dos arrays i torna un nou array. | arrayNou=array1.concat(array2); |
Array.join(string) | Converteix tots els elements d'un array a string i els concatena en un nou string que es tornat per la funció. Si se li passa un argument fa que aquest argument sigui separador entre els elements. | nouString=unArray.concat("Separador") |
Array.reverse() | Canvia l'ordre dels elements d'acord amb l'ordre de l'índex | unArray.reverse() |
Array.slice(principi, final) | Aquesta funció torna un array que comença a l'element indicat en principi i acaba a l'element indicat en final. Si no se li indica final llavors torna fins al final de l'array. |
NuevoARray=unArray.slice(2,5) |
Array.sort(function) |
Permet ordenar els elements d'un array segons un criteri expressat en la funció | Exemple d'us |
Array.toSource() | Torna un string amb tots els elements de l'array separats per comas. Aquesta llista està entre claudàtors. Si un element és un array aquest element vindrà també entre claudàtors. |
unString=unArray.toSource() |
Array.toString() | Torna un string amb tots els elements de l'array separats per comas. |
unString=unArray.toSource() |
Internament aquest dos estats estan representats per un 1 i un 0 respectivament.
Per a declarar un objecte de tipus Boolean hem de fer nomObjecteBoolean = new Boolean(valor) on valor pot ser o true o false.
Quan fem una instrucció de declaració varBool = Boolean(false) estem fent una variable de tipus Boolean que te valor false. No és un objecte de tipus Boolean. Són dues coses diferents.
Aquest objecte disposa de mètodes per a construir l'objecte a
partir de unes certes dades, com la dat i hora, i d'altres mètodes
per a obtenir la data o l'hora, tot allò a partir d'aquest número
de mil·lisegons esmentat abans.
Instrucció | Descripció |
miData = new Date() | Aquesta instrucció de construcció sense paràmetres crea un objecte de tipus Date que té com a dada la data de l'ordinador en el moment que s'executa la instrucció. |
unaDAta = new Date("January 6, 2000 10:35:00") | Crea una data amb les dades incloses. Pot ometre's els números de l'hora i llavors l'objecte s'inicialitza com so haguéssim posat 0. |
miNaixement = new Date(1982,11,25) | Així tenim una data del dia 25 de desembre de 1982 hora 0. |
miNaixement = new Date(1982,11,25,10,25,0) | Així obtenim la mateixa data afegint també les 10:25:00 hores |
Tipus | Mètodes | |||||||
Mètodes "get" per llegir dates i hores del valor dels objectes date. |
|
|||||||
Mètodes "set" per posar dates i hores del valor dels objectes date. |
|
|||||||
Mètodes "to" per a obtenir dades dels objectes date. |
|
|||||||
Mètodes parse. |
|
Per tal de fer un exemple posem un rellotge en pantalla que mira l'hora que tenim en el nostre ordinador. Hem de dir que també es fa ús de les funcions setTimeout i clearTimeout que serveixen per a arrancar o aturar execució de funcions en un cert interval de temps.
Exemple de l'objecte date | Visualització per pantalla |
<FORM NAME="reloj"> <center> <INPUT TYPE="text" NAME="texto" SIZE=12 VALUE =""><br> <input type=BUTTON value="Pon en marcha" onClick="ponEnMarchaReloj()"><br> <input type=BUTTON value="Para" onClick="paraReloj()"> </center> </FORM> <SCRIPT LANGUAGE="JavaScript"> <!-- var relojID = null var relojEnMarcha = false function paraReloj() { if(relojEnMarcha) clearTimeout(relojID) relojEnMarcha = false } function ponEnMarchaReloj() { paraReloj() muestraHora() } |
També teniu un exemple de com fer ús d'aquest objecte en el calendari que es troba en la pàgina de Complements.
Exemple de l'objecte Function | Visualització per pantalla |
<form name ="frmProva" <input type="text" name = "txtProva" value="" onMouseover="ponText()"> <input type="reset" value="Vacia""> </form"> <script"> var ponText = new Function("document.frmProva.txtProva.value='Hola Pep'") </script"> |
Propietat | Valor | Ús |
E | Número e | Math.E |
LN10 | Logaritme neperià de 10 | Math.LN10 |
LN2 | Logaritme neperià de 2 | Math.LN2 |
LOG10E | Logaritme decimal de e | Math.LOG10E |
LOG2E | Logaritme en base 2 de e | Math.LOG2E |
PI | És el número ¶ | Math.PI |
SQRT1_2 | Arrel quadra de ½ | Math.SQRT1_2 |
SQRT2 | Arrel quadrada de 2 | Math.SQRT2 |
Mètode | Descripció | Ús |
abs() | Torna el valor absolut d'un número | Math.abs(num) |
sin(), cos(), tan() | Són les funcions trigonomètriques. | Math.sin(angle)... L'angle ha de ser un número en radians. |
asin(), acos(), atan() | Són les funcions inverses de les funcions trigonomètriques. | Math.asin(número) |
atan2 | Calcula l'arc tangent del quocient dels dos paràmetres. | Math.atan2(num1,num2) |
ceil(), floor() i round() | ceil(num) torna el més petit número enter major que num. (Arrodonir per excés) floor(num) torna el més gran número enter més petit que num. (Arrodonir per defect) floor(num) torna un número arrodonit de num, el número enter més proper a num. | Math.ceil(num) |
exp(), log() | Son les funcions exponencials i logarítmiques en base e | Math.log(num) |
pow() | pow(a,n) torna a elevat a n | Math.pow(a,n) |
sqrt() | torna l'arrel quadrada d'un número | Math.sqrt(num) |
max(), min() | Torne el major o menor valor dels dos argumets que se'ls pot passar | Math.max(num1,num2) |
random() | torna un número aleatori major o igual que 0 i menor que 1. | Math.random() |
toSource() | Per a crear còpies de l'objecte Math | |
toString() | Torna un string representant l'objecte |
Propietat | Valor | Ús |
MAX_VALUE | Number.MAX_VALUE | |
MIN_VALUE | Number.MIN_VALUE | |
NaN | Valor especial. Not a number. | Number.NaN |
NEGATIVE_INFINITY | Valor especial | Number.NEGATIVE_INFINITY |
POSITIVE_INFINITY | Valor especial | Number.POSITIVE_INFINITY |
Declaració | Tipus |
varSalutacio = "Hola Món" | Crea una variable de tipus String |
objSalutacio = new String("Hola Món") | Crea un objecte de tipus String |
Exemple de varible string | Visualització per pantalla |
<script> varSalutacio = "Hola Món"; document.write("VarSalutació té ",varSalutacio.length," caràcters"); </script> |
Mètodes per a donar format als textos en el navegador | Descripció | Ús | ||
link | Crea un tag de tipus <a link ...> |
<script> var miString=new String("Capítol 1"); document.write(miString.link("jscap01.html")); </script>El resultat és el link: |
||
anchor | Crea un tag de tipus anchor | El mecanisme és igual que en el cas del link | ||
big, blink, bold, fixed, fontsize, fontcolor italics, small, strike, sub i sup | Creen els tags corresponents |
El resultat d'aquest script el teniu a sota:
<script> document.write("Vermell".fontcolor('#FF3300')); </script> |
||
Mètodes per a manipular strings | Descripció | Ús | ||
charAt i charCodeAt | Tornen el caràcter o el codi del caràcter que està en la posició que li passem |
El codi següent produeix una sortia pre pantalla:
<script> document.write("HOLA MARTA".charAt(3)); document.write("HOLA MARTA".charCodeAt(3)); </script> |
||
concat | string1.concat(string2) crea un nou string amb el valor de l'string1 seguit del valor de l'string2, i torna aquest nou string. | nouStringConcatenat=string1.concat(string2) | ||
indexOf | Torna la posició d'un determinat substring dins un string. |
La instrucció document.write("Hola Món".indexOf("Món")); escriu un 5 que és la posició de la M de Món dins el string. Podem afegir un paràmetre numèric que serà el lloc de l'string on la funció començara a ger la cerca del substring. La instrucció document.write("Hola Pedrolo".indexOf("o",3)) escriu un 9 en el document. |
||
lastIndexOf | Igual que indexOf pero fa la cerca del subtring de dreta a esquerra. | |||
fromCharCode(num1,...) fromCharCode(keyevent.wich) | Torna un string amb els caràcters corresponents als números que rep, en ISO-Latin-1. Amb l'altre ús podem saber que tecla ha estat premuda. |
La instrucció document.write(String.fromCharCode(65,66,67,68)); posa en pantalla la seqüència ABCD. |
||
match, replace, serch | Es fa ús junt amb objectes RegExp per trobar ocurrències dins d'un String de determinats patrons. | |||
slice(num1,num2) slice(num) | La primera forma torna el substring amb num2-num1 caràcters començant pel caràcter que està al lloc num1 La segona torna el substrig que comença al lloc num1 fins al final de l'string. |
<script> miString = new String("0123456789"); document.write(miString.slice(2,8)); document.write("<br>",miString.slice(4)); </script>La primera imprimeix 234567 i la segona imprimeix 3456789. |
||
split(separador,num) split(separador) split(regexp,num) split(regexp) | Torna un vector en el que cada element és un tros de l'string segons el separador o la regexp. |
|
||
substr substring | Tornen trosos d'un string pasant-lis els llocs de principi i fi (num1 i num2) o només el lloc d'inici. | |||
toLowerCase toUpperCase | Tornen l'string en minúscules o majúscules | |||
toString | La mateixa que la d'altres objectes. | |||
valueOf | La mateixa que la d'altres objectes. Aquí tornarà el mateix string |