Così sto prototipo utilizzando JavaScript di apprendimento, e ha cercato un po 'di codice:risultato indefinito utilizzando prototipo [javascript]
function Employee(name) { this.name= name; }
var m = new Employee("Bob");
var working= { isWorking: true };
Employee.prototype = working;
alert(m.isWorking);
Purtroppo, ricevo un messaggio di non definito, invece che il vero valore. C'è una ragione per questo risultato?
Ho effettuato diversi test. Ho concluso che la riassegnazione dell'oggetto prototipo fa sì che eventuali istanze create in precedenza della classe Employee non siano in grado di accedere a nessuna proprietà trovata all'interno del prototipo appena assegnato. È accurato?
Quando si crea un'istanza prende un riferimento al prototipo del costruttore al momento. Se sostituisci il prototipo in un secondo momento, le istanze esistenti non lo rifletteranno. Una volta creata un'istanza, è generalmente previsto che estenderai il prototipo anziché sostituirlo. –
Il riferimento dell'istanza all'oggetto prototipo è impostato in fase di costruzione (ovvero la riga con 'new'). La modifica dell'intero oggetto proprietà 'Foo.prototype' non cambierà questo riferimento dopo l'istanza. Tuttavia, le modifiche all'oggetto 'Foo.prototype' _will_ possono essere viste (poiché si tratta dello stesso oggetto), quindi ad es. se invece hai fatto 'Employee.prototype.isWorking = true;', vedresti cosa ti aspetti –
Per ulteriori informazioni, questa è un'eccellente riduzione dell'ereditarietà del prototipo: http://markdalgleish.com/2012/10/a -touch-of-class-inheritance-in-javascript/ – br3nt