Compartir a través de


Crear objetos propios con funciones constructoras

Una de las características más eficaces de JScript es la capacidad de definir funciones constructoras para crear objetos personalizados basados en prototipos con el fin de usarlos en scripts. Para crear una instancia de un objeto basado en prototipos, se ha de definir primero una función constructora. Este proceso crea un nuevo objeto y lo inicializa (crea propiedades y asigna un valor inicial). Cuando termina, el constructor devuelve una referencia al objeto construido. En el constructor, se hace referencia al objeto creado con la instrucción this.

Constructores con propiedades

En el ejemplo siguiente se define una función constructora para los objetos pasta. La instrucción this permite que el constructor inicialice el objeto.

// pasta is a constructor that takes four parameters.
function pasta(grain, width, shape, hasEgg) {
   this.grain = grain;    // What grain is it made of?
   this.width = width;    // How many centimeters wide is it?
   this.shape = shape;    // What is the cross-section?
   this.hasEgg = hasEgg;  // Does it have egg yolk as a binder?
}

Tras definir un constructor de objetos, se crean instancias del objeto mediante el operador new. En este ejemplo, se usa el constructor pasta para crear los objetos spaghetti y linguine.

var spaghetti = new pasta("wheat", 0.2, "circle", true);
var linguine = new pasta("wheat", 0.3, "oval", true);

Se pueden agregar dinámicamente propiedades a la instancia de un objeto, pero esos cambios sólo afectan a esa instancia en particular.

// Additional properties for spaghetti. The properties are not added
// to any other pasta objects.
spaghetti.color = "pale straw";
spaghetti.drycook = 7;
spaghetti.freshcook = 0.5;

Si se desea agregar una propiedad más a todas las instancias del objeto sin modificar la función constructora, se puede agregar la propiedad al objeto prototipo del constructor. Para obtener más información, vea Creación avanzada de objetos (Visual Studio - JScript).

// Additional property for all pasta objects. 
pasta.prototype.foodgroup = "carbohydrates";

Constructores con métodos

Es posible incluir métodos (funciones) en la definición de un objeto. Una manera de hacerlo consiste en incluir una propiedad en la función constructora que haga referencia a una función definida en otra parte. Al igual que las funciones constructoras, estas funciones también hacen referencia al objeto actual con la instrucción this.

En el siguiente ejemplo se expande la función constructora pasta definida anteriormente de modo que incluya un método toString, al que se llamará si la función muestra el valor del objeto. En general, JScript utilizará el método toString de un objeto cuando se use el objeto en una situación en la que se requiere una cadena. Rara vez es necesario llamar al método toString de manera explícita.

// pasta is a constructor that takes four parameters.
// The properties are the same as above.
function pasta(grain, width, shape, hasEgg) {
   this.grain = grain;    // What grain is it made of?
   this.width = width;    // How many centimeters wide is it?
   this.shape = shape;    // What is the cross-section?
   this.hasEgg = hasEgg;  // Does it have egg yolk as a binder?
   // Add the toString method (defined below).
   // Note that the function name is not followed with parentheses;
   // this is a reference to the function itself, not a function call.
   this.toString = pastaToString;
}

// The function to display the contents of a pasta object.
function pastaToString() {
   return "Grain: " + this.grain + "\n" +
          "Width: " + this.width + " cm\n" +
          "Shape: " + this.shape + "\n" +
          "Egg?:  " + Boolean(this.hasEgg);
}

var spaghetti = new pasta("wheat", 0.2, "circle", true);
// Call the method explicitly.
print(spaghetti.toString());
// The print statement takes a string as input, so it
//  uses the toString() method to display the properties
// of the spaghetti object.
print(spaghetti);

Esto genera el siguiente resultado:

Grain: wheat
Width: 0.2 cm
Shape: circle
Egg?:  true
Grain: wheat
Width: 0.2 cm
Shape: circle
Egg?:  true

Vea también

Otros recursos

Objetos basados en prototipos

Objetos de JScript