Domanda

Mi piace esempio di modello prototipo di Steve Yegge e ha deciso di creare una rapida prova dell'esempio di concetto.

Tuttavia, non ho davvero pensato alle cose. Mentre è ottimo per specificare dinamicamente il comportamento degli oggetti ed è una soluzione facile per elfo supponente esempio, sto ancora cercando di trovare il modo migliore per gestire le variabili di istanza.

Ad esempio, supponiamo che io abbia un oggetto AwesomeDragon. Voglio quindi creare un oggetto AwesomeDragonImmuneToFire in modo da creare un nuovo figlio di AwesomeDragon (AwesomeDragonImmuneToFire eredita le proprietà da AwesomeDragon) e 'put' " ImmuneToFire " come proprietà con un valore "true". Fin qui tutto bene. Ora diciamo che voglio inviare il mio oggetto AwesomeDragon in un tour dei villaggi contadini vicini. Ciò comporterà l'aggiornamento della proprietà 'position' di AwesomeDragon. Tuttavia, nel momento in cui lo farò, anche AwesomeDragonImmuneToFire decollerà.

È la soluzione migliore per sovrascrivere i valori di istanza durante la creazione di oggetti, ad es. immediatamente "metti" il valore "posizione" su AwesomeDragonImmuneToFire sull'attuale valore "get" di "posizione"?

È stato utile?

Soluzione

Non dipende da come si implementa effettivamente l'eredità nel proprio sistema?

Ad esempio, in una versione JavaScript di ciò che descrivi, il prototipo per AwesomeDragonImmuneToFire sarebbe normalmente una istanza di un AwesomeDragon , e dato che avresti sempre lavorato con le istanze, non importa cosa faresti per qualsiasi AwesomeDragon :

function Dragon()
{
    this.position = "starting point";
}

function AwesomeDragon()
{
    this.awesome = true;
}
AwesomeDragon.prototype = new Dragon();

function AwesomeDragonImmuneToFire()
{
    this.immuneToFire = true;
}
AwesomeDragonImmuneToFire.prototype = new AwesomeDragon();

>>> var awesome = new AwesomeDragon();
>>> var immune = new AwesomeDragonImmuneToFire();
>>> awesome.position = "flying above village";
>>> immune.position;
"starting point"
>>> immune.awesome
true

In questo esempio, non ci sono classi e tutte le istanze sono solo istanze di Object che capiscono quale funzione è stata usata per costruirle. new è solo un po 'di zucchero sintattico e l'utilizzo di StudlyCaps per funzioni di costruzione è solo una convenzione per le funzioni che devono essere utilizzate con new .

La cosa fondamentale è che ogni oggetto ha una catena di oggetti prototipo, che viene esaminata se si tenta di accedere a un attributo che l'oggetto stesso non detiene, secondo la descrizione di Yegge di ciò che il modello di proprietà " è.

https://developer.mozilla.org/en/Core_JavaScript_1.5_Gu_Det / a>

Altri suggerimenti

  

Ciò comporta l'aggiornamento della proprietà 'position' di AwesomeDragon. Tuttavia, nel momento in cui lo farò, anche AwesomeDragonImmuneToFire decollerà.

Forse ho frainteso ma non sono sicuro del motivo per cui pensi che anche AwesomeDragonImmuneToFire decollerà. Se sono due oggetti distinti e la posizione è una proprietà degli oggetti, ogni istanza (drago) avrà la propria posizione. La modifica della posizione di un drago non dovrebbe influire sulla posizione dell'altro.

scroll top