Upload
danae-aguilar-guzman
View
54
Download
0
Embed Size (px)
Citation preview
Contenido del Módulo
Objetos nativos
Objetos personalizados
Herencia de un objeto
Manteniendo objetos fuera del espacio de nombres global
Objetos en JavaScript
JavaScript es un lenguaje de programación orientado a objetos basado en prototipos
En JavaScript todo es un objeto.
Puedes crear un nuevo objeto de la nada, o crear un objeto a partir de un clon de un objeto existente, conocido como un prototipo.
Puedes simular la creación de un objeto usando una función.
Objetos nativos
Objetos String
length
var string1 = new String("Hola"); var string2 = "Como estas?";
var nombre = new String("Pepito"); document.write(nombre.length); //6
Objetos nativos
charAt()
charCodeAt()
var cadena = prompt("Ingrese algun texto", "Hola!"); var ultimoCaracter = cadena.charAt(cadena.length - 1); document.write("EL ultimo caracter es " + ultimoCaracter);
var cadena = prompt("Ingrese algun texto", "Hola!"); var primerCharCode = cadena.charCodeAt(0); document.write("El primer char code es: " + primerCharCode);
Objetos nativos
fromCharCode()
indexOf() y lastIndexOf()
var cadena; cadena = String.fromCharCode(65, 66, 67); document.write(cadena); //ABC
var cadena = "Hola pepito, como estas Pepito?"; var posicion = cadena.indexOf("Pepito"); alert(posicion);
Objetos nativos
substr() y substring()
toLowerCase() y toUpperCase()
var cadena = "JavaScript"; var subCadena = cadena.substring(0, 4); alert(subCadena);
var cadena = "Una Cadena Con MINUSCULAS"; alert(cadena.toLowerCase());
Objetos nativos
substr() y substring()
toLowerCase() y toUpperCase()
var cadena = "JavaScript"; var subCadena = cadena.substring(0, 4); alert(subCadena);
var cadena = "Una Cadena Con MINUSCULAS"; alert(cadena.toLowerCase());
Objetos nativos
Objetos Math
abs()
var radio = prompt("Ingrese el radio del círculo", ""); var area = (Math.PI) * radio * radio; document.write("El area es " + area);
var numero = -101; document.write(Math.abs(numero)); // 101
Objetos nativos
ceil() y floor()
round()
var numero = 101.01; document.write(Math.ceil(numero) + "<br>"); //102 document.write(parseInt(numero)); //101
var numero = 44.5; document.write(Math.round(numero) + "<br>"); //45 numero = 44.49; document.write(Math.round(numero)); //44
Objetos nativos
random()
pow()
var cantidadLanzamientos; var valorDado; for (cantidadLanzamientos = 0; cantidadLanzamientos < 10; cantidadLanzamientos++) { valorDado = (Math.floor(Math.random() * 6) + 1); document.write(valorDado + "<br>"); }
var resultado = Math.pow(5, 3); document.write(resultado); //125
Objetos nativos
Objeto Number
toFixed()
var numero1 = new Number(123); var numero2 = new Number('123');
var costo = 9.99; var masImpuestos = 9.99 * 1.075; document.write("El total es $" + masImpuestos + "<br>"); //10.73925 masImpuestos = masImpuestos.toFixed(2); document.write("Total con 2 decimales " + masImpuestos); //10.74
Objetos nativos
Objetos Array
concat()
var nombres = new Array(); nombres[0] = "Pepito"; nombres[1] = "Anita"; nombres[11] = "Luchito"; document.write("El ultimo nombre es " + nombres[nombres.length - 1]);
var nombres = new Array("Pepito", "Anita", "Luchito"); var edades = new Array(21, 31, 19); var arreglo = names.concat(ages);
Objetos nativos
slice()
join()
var nombres = new Array("Pepito", "Sara", "Anita", "Luchito", "Boby"); var arreglo = nombres.slice(1, 3);
var compras = new Array("Crereal","Platano","Leche","Pan"); var listaCompras = compras.join("<br>");
Objetos nativos
sort()
reverse()
var nombres = new Array("Pepito", "Sara", "Anita", "Luchito", "Boby"); nombres.sort(); document.write("Los nombres en orden" + "<br>"); var indice; for (indice = 0; indice < nombres.length; indice++) { document.write(nombres[indice] + "<br>"); }
var compras = new Array("Crereal", "Platano", "Papas", "Leche", "Pan"); compras.reverse();
Objetos personalizados
El Patrón Object Literal
var automovil = { anio: 2010, marca: 'Nissan', modelo: 'XTerra', obtenerDatos: function () { return 'Vehiculo: ' + this.anio + ' ' + this.marca + ' ' + this.modelo; } };
Objetos personalizados
El Patrón Object Literal
La manera mas fácil de crear objetos en JavaScript
Las llaves indican el objeto y contienen propiedades y métodos
No tienen un prototipo asociado al objeto
Usado para representar datos, ej: para enviarlos a otro código.
No se crea un tipo, solo instancias.
Objetos personalizados
El Patrón Factory
JavaScript tiene un tipo Object, podemos usarlo para crear objetos programáticamente.
Object tiene un prototipo que es clonado cuando usamos la palabra clave new
Objetos personalizados
El Patrón Factory
El objeto prototipo hereda los métodos:
constructor
hasOwnProperty
isPrototypeOf
propertyIsEnumerable
toLocalString
toString
valueOf
Objetos personalizados
El Patrón Factory
1. Declarando el factory:
function getVehiculo(anio, marca, modelo) { var vehiculo = new Object(); vehiculo.anio = anio; vehiculo.marca = marca; vehiculo.modelo = modelo; vehiculo.obtenerDatos = function () { return 'Vehiculo: ' + this.anio + ' ' + this.marca + ' ' + this.modelo; }; return vehiculo; }
Objetos personalizados
El Patrón Factory
2. Invocando el factory:
var automovil1 = getVehiculo(2011, 'Suzuki', 'Vitara'); var automovil2 = getVehiculo(2010, 'Nissan', 'XTerra');
Objetos personalizados
El Patrón Factory
Aprovecha la naturaleza dinámica de JavaScript para agregar propiedades y métodos.
Podemos crear varias instancias
Las instancias son de tipo Object
Las propiedades son públicas
Objetos personalizados
Creando una clase
En JavaScript no existe la palabra reservada class
Se puede simular una clase con una función que será la función constructor.
Usamos var para definir las propiedades privadas
Usamos new para crear una instancia.
Cada instancia tiene su propia copia de los datos y métodos
Objetos personalizados
Creando una clase
1. Definiendo la clase:
function Vehiculo(elAnio, laMarca, elModelo) { var anio = elAnio; var marca = laMarca; var modelo = elModelo; this.obtenerDatos = function () { return 'Vehículo: ' + anio + ' ' + marca + ' ' + modelo; }; }
Pri
vad
os
Objetos personalizados
Creando una clase
1. Definiendo la clase:
function Vehiculo(elAnio, laMarca, elModelo) { var anio = elAnio; var marca = laMarca; var modelo = elModelo; this.obtenerDatos = function () { return 'Vehiculo: ' + anio + ' ' + marca + ' ' + modelo; }; }
Pri
vad
os
Objetos personalizados
La propiedad prototype
En JavaScript todo es de tipo Object.
Object tiene una propiedad prototype.
El prototype contiene propiedades y métodos disponibles para todas las instancias del tipo.
El prototype no tiene acceso a propiedades privadas.
Debemos exponer las propiedades para accederlas desde el prototype
Objetos personalizados
La propiedad prototype
Definimos el método para compartir con todas las instancias:
function Vehiculo(elAnio, laMarca, elModelo) { this.anio = elAnio; this.marca = laMarca; this.modelo = elModelo; }
Vehiculo.prototype.obtenerDatos = function() { return 'Vehículo: ' + this.year + ' ' + this.make + ' ' + this.model; };
Pú
blic
os
Objetos personalizados
prototype/private compromise
Exponer los datos en solo lectura (Los getters):
function Vehiculo(elAnio, laMarca, elModelo) { var anio = elAnio; var marca = laMarca; var modelo = elModelo; this.getAnio = function () { return anio; }; this.getMarca = function () { return marca; }; this.getModelo = function () { return modelo; }; }
Objetos personalizados
prototype/private compromise
Invocando a los getters:
Vehiculo.prototype.obtenerDatos = function () { return 'Vehículo: ' + this.getAnio() + ' ' + this.getMarca() + ' ' + this.getModelo(); }
Herencia de un objeto
Tenemos la clase base:
var Vehiculo = (function () { function Vehiculo(anio, marca, modelo) { this.anio = anio; this.marca = marca; this.modelo = modelo; } Vehiculo.prototype.obtenerDatos = function () { return this.anio + ' ' + this.marca + ' ' + this.modelo; }; Vehiculo.prototype.iniciarMotor = function () { return 'Broom'; }; return Vehiculo;
})();
Herencia de un objeto
Definiendo la clase hija:
var Auto = (function (padre) { Auto.prototype = new Vehiculo(); Auto.prototype.constructor = Auto; function Auto(anio, marca, modelo) { padre.call(this, anio, marca, modelo); this.CantidadRuedas = 4; } Auto.prototype.obtenerDatos = function () { return 'Tipo de vehiculo: Auto ' + parent.prototype.getInfo.call(this); }; return Auto; })(Vehiculo);
Manteniendo objetos fuera del espacio de nombres global
Un problema común es la polución del espacio de nombres global.
En JavaScript no tenemos la palabra reservada namespace.
Se puede implementar un equivalente a un namespace.
Manteniendo objetos fuera del espacio de nombres global
Ejemplo. Si tenemos:
Tenemos 5 entradas en el espacio de nombres global
var cantidadVehiculos = 3; var vehiculos = new Array(); function Carro() { } function Camion() { } var reparacion = { descripcion: 'cambiado de bujias', costo: 100 };
Manteniendo objetos fuera del espacio de nombres global
El patrón namespace:
Tenemos solo 1 entrada en el espacio de nombres global, la propiedad miApp
var miApp = {}; miApp.cantidadVehiculos = 5; miApp.vehiculos = new Array(); miApp.Carro = function () { } miApp.Camion = function () { } miApp.reparacion = { descripcion: 'cambiado de bujias', costo: 100 };
Manteniendo objetos fuera del espacio de nombres global
El patrón namespace:
Podemos tener varios archivos JavaScript en la aplicación.
Para crear el namespace solo una vez (Singleton):
var miApp = miApp || {};
Manteniendo objetos fuera del espacio de nombres global
(IIFE) immediately invoked function, al crear un namespace:
(function () { this.miApp = this.miApp || {}; var ns = this.miApp; var cantidadVehiculos = 5; var vehicles = new Array(); ns.Carro = function () { } ns.Camion = function () { } var repair = { description: 'cambiado de bujias', cost: 100 }; }());