Condividi tramite


Creazione avanzata di oggetti (JScript)

Aggiornamento: novembre 2007

In JScript è supportata l'ereditarietà con oggetti basati su prototipi personalizzati. L'ereditarietà consente agli oggetti basati su prototipi di condividere un insieme comune di proprietà e metodi che possono essere aggiunti o rimossi in modo dinamico. Inoltre, singoli oggetti possono eseguire l'override del funzionamento predefinito.

Creazione di un oggetto basato su prototipi

Prima di creare un'istanza di un oggetto basato su un prototipo, è necessario definire una funzione costruttore. Per ulteriori informazioni vedere Creazione di oggetti personalizzati mediante le funzioni costruttore. Quando si crea un costruttore è possibile utilizzare le proprietà dell'oggetto prototype, esso stesso una proprietà di ogni costruttore, per creare proprietà ereditate e metodi condivisi. Il costruttore fornisce a un oggetto le informazioni specifiche dell'istanza, mentre l'oggetto prototype fornisce le informazioni specifiche dell'oggetto e i metodi.

Nota:

Per avere effetto su tutte le istanze dell'oggetto, una modifica deve essere apportata all'oggetto prototype del costruttore. La modifica della proprietà prototype di una singola istanza di un oggetto non ha effetto sulle altre istanze dello stesso oggetto.

Dal momento che le proprietà e i metodi dell'oggetto prototype vengono copiati per riferimento in ciascuna istanza di un oggetto, tutte le istanze possono accedere alle stesse informazioni. È possibile modificare il valore di una proprietà del prototipo in una singola istanza per effettuare l'override del valore predefinito, ma la modifica avrà effetto solo su tale istanza. Di seguito è fornito un esempio di utilizzo di un costruttore personalizzato denominato Circle. L'istruzione this consente al metodo di accedere ai membri dell'oggetto.

// 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();

Utilizzando questo principio è possibile definire proprietà aggiuntive per funzioni costruttore esistenti, le quali dispongono tutte di oggetti prototipo. Questa tecnica funziona solo quando la modalità veloce è disattivata. Per ulteriori informazioni, vedere /fast.

Se, ad esempio, si desidera rimuovere gli spazi iniziali e finali dalle stringhe, come è possibile fare con la funzione Trim in Visual Basic, è possibile creare un metodo personalizzato sull'oggetto prototipo String. Tutte le stringhe nello script erediteranno automaticamente quel metodo. Nell'esempio riportato di seguito viene utilizzato un'espressione regolare in formato letterale per rimuovere gli spazi. Per ulteriori informazioni vedere Oggetto Regular Expression.

// 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 + ")");

Una volta compilato il programma con il flag /fast-, l'output sarà il seguente:

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

Vedere anche

Altre risorse

Oggetti basati su prototipi

Oggetti JScript