Compartir a través de


Creación avanzada de objetos (Visual Studio - JScript)

JScript admite la herencia con los objetos personalizados basados en prototipos. Mediante la herencia, los objetos basados en prototipos pueden compartir un conjunto común de propiedades y métodos que se pueden agregar o quitar dinámicamente. Además, objetos individuales pueden reemplazar el comportamiento predeterminado.

Crear un objeto basado en prototipo

Para crear una instancia de un objeto basado en prototipos, se ha de definir primero una función constructora. Para obtener más información, vea Crear objetos propios con funciones constructoras. Tras escribir este constructor, se pueden utilizar propiedades del objeto prototype (el cual constituye por sí mismo una propiedad de todo constructor) para crear propiedades heredadas y métodos compartidos. El constructor proporciona a un objeto la información específica de la instancia, mientras que el objeto prototype le proporciona la información y los métodos específicos del objeto.

Nota

Para que afecte a todas las instancias del objeto, tiene que haber un cambio en el objeto prototype del constructor. Si se cambia la propiedad prototype de una instancia de un objeto, no se produce efecto alguno en las demás instancias del mismo objeto.

Puesto que las propiedades y los métodos del objeto prototype se copian en cada instancia de un objeto mediante referencia, todas las instancias tienen acceso a la misma información. Se puede cambiar el valor de una propiedad Prototype en una instancia para reemplazar el valor predeterminado, pero el cambio sólo afectará a esa instancia. A continuación se ofrece un ejemplo en el que se utiliza el constructor personalizado Circle. La instrucción this permite que el método tenga acceso a los miembros del objeto.

// Define the constructor and add instance specific information.
function Circle (radius) {
    this.r = radius;  // The radius of the circle.
}
// Add a property the Circle prototype.
Circle.prototype.pi = Math.PI;
function ACirclesArea () {
   // The formula for the area of a circle is pi*r^2.
   return this.pi * this.r * this.r; 
}
// Add a method the Circle prototype.
Circle.prototype.area = ACirclesArea;
// This is how you would invoke the area function on a Circle object.
var ACircle = new Circle(2);
var a = ACircle.area();

Siguiendo este principio, se pueden definir propiedades adicionales para las funciones constructoras existentes (todas tienen objetos prototipo). Esto sólo funciona cuando el modo rápido está desactivado. Para obtener más información, vea /fast.

Por ejemplo, si desea quitar los espacios iniciales y finales de las cadenas (de forma similar a la función Trim de Visual Basic), puede crear un método propio en el objeto prototipo String y todas las cadenas del script heredarán automáticamente el método. En este ejemplo se utiliza un literal de expresión regular para quitar los espacios. Para obtener más información, vea Regular Expression (Objeto).

// Add a function called trim as a method of the prototype 
// object of the String constructor.
String.prototype.trim = function() {
   // Use a regular expression to replace leading and trailing 
   // spaces with the empty string
   return this.replace(/(^\s*)|(\s*$)/g, "");
}

// A string with spaces in it
var s = "    leading and trailing spaces    ";
print(s + " (" + s.length + ")");

// Remove the leading and trailing spaces
s = s.trim();
print(s + " (" + s.length + ")");

Después de compilar este programa con la marca /fast-, el resultado de este programa será:

    leading and trailing spaces     (35)
leading and trailing spaces (27)

Vea también

Otros recursos

Objetos basados en prototipos

Objetos de JScript