JScript  

Creación avanzada de objetos

Un constructor es una función a la que se llama para crear instancias de e inicializar un tipo determinado de objetos. Se llama a un constructor con la palabra clave new. A continuación se incluyen algunos ejemplos del uso de constructores.

var miObjeto = new Object();             // Crea un objeto genérico sin propiedades.
var miCumpleaños = new Date(1961, 5, 10);  // Crea un objeto Date.
var micoche = new Car();                   // Crea un objeto definido por el usuario e inicializa sus propiedades.

Se pasa al constructor una referencia a un objeto vacío recién creado, como el valor de la palabra clave especial this. A continuación, el constructor es responsable de llevar a cabo una inicialización apropiada del nuevo objeto (crear propiedades y asignarles valores iniciales). Cuando termina, devuelve una referencia al objeto que ha construido.

Escribir constructores

Puede crear objetos e inicializarlos mediante el operador new junto con funciones de constructor predefinidas, como Object(), Date() y Function(). Una de las características más eficaces de la programación orientada a objetos es la capacidad de definir funciones de constructor personalizadas para crear objetos personalizados y usarlos en secuencias de comandos. La creación de constructores personalizados le permite crear objetos con propiedades ya definidas. A continuación se incluye un ejemplo de un constructor personalizado (observe el uso de la palabra clave this).

function Circulo (puntox, puntoy, radio) {
    this.x = puntox;  // El componente x del centro del círculo.
    this.y = puntoy;  // El componente y del centro del círculo.
    this.r = radio;  // El radio del círculo.
}

Al invocar al constructor Circulo, se suministran valores para el punto central y el radio del círculo (estos elementos son lo único que se necesita para definir completamente un objeto círculo). Conseguirá un objeto Círculo con tres propiedades. Las instancias del objeto Círculo se crearían de la siguiente manera.

var unCirculo = new Circulo(5, 11, 99);

Usar prototipos para crear objetos

Cuando se escribe un constructor, es posible utilizar propiedades del objeto prototipo (prototype, que es una propiedad de todos los constructores) para crear propiedades heredadas y métodos compartidos. Las propiedades y métodos del prototipo se copian por referencia en cada objeto de una clase, por lo que todos tienen el mismo valor. Es posible cambiar el valor de una propiedad prototipo en un objeto y el nuevo valor sustituye al predeterminado, pero sólo en esa instancia. El resto de los objetos miembros de esa clase no se ven afectados por el cambio. A continuación se incluye un ejemplo en el que se hace uso del constructor personalizado, Circulo (observe el uso de la palabra clave this).

Circulo.prototype.pi = Math.PI;
function AreadeCirculo () {
    return this.pi * this.r * this.r; // La fórmula para hallar el área de un círculo es pi·r2.
}
Circulo.prototype.area = AreadeCirculo; // La función que calcula el área de un círculo es ahora un método del objeto prototipo Círculo.
var a = UnCirculo.area();               // De esta manera se invocaría la función area en un objeto Círculo.

Siguiendo este principio, puede definir propiedades adicionales para funciones de constructor predefinidas (todas las cuales tienen objetos prototype). Por ejemplo, si desea poder quitar espacios iniciales y finales de las cadenas (de forma similar a la función Trim de VBScript), puede crear un método propio en el objeto prototype de String y todas las cadenas de la secuencia de comandos heredarán automáticamente el método.

// Agregar una función denominada trim como método del objeto prototype
// del constructor String.
String.prototype.trim = function()
{
    // Use una expresión regular para reemplazar los espacios iniciales y
    // finales con una cadena vacía
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

// Una cadena con espacios
var s = "    espacios iniciales y finales    ";

// Muestra "    espacios iniciales y finales     (35)"
window.alert(s + " (" + s.length + ")");

// Quita los espacios iniciales y finales
s = s.trim();
// Muestra "espacios iniciales y finales (27)"
window.alert(s + " (" + s.length + ")");
Ayuda de Javascript y Vbscript para Javascripts.astalaweb.com.