Se definisco una proprietà da prototipare appare nel costruttore di oggetto, perché?

0

Ho preso l'esempio da questa domanda leggermente modificato: Qual è il punto del metodo del prototipo?

function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
this.status="single"
}
employee.prototype.salary=10000000;
var fred=new employee("Fred Flintstone","Caveman",1970);
console.log(fred.salary);
fred.salary=20000;
console.log(fred.salary)

E l'output in console è questo:

Qualèladifferenzasalaryènelcostruttoremapossoancoraaccederviconfred.salary,comepossovedereseèincostruttoredalcodice,lostatoèancoraproprietàdeidipendenticomepossodireadesempiosenameèquellodeldipendenteoèstatotouchdall'inizializzazione?

Perchélostipendioènelcostruttore,quandoname,jobtitle,nascedove"toccato" da employee("Fred Flintstone","Caveman",1970); "costruttore"?

    
posta Eduard Florinescu 10.09.2012 - 22:48
fonte

1 risposta

1

Impostando il prototipo, stai solo creando un oggetto da condividere con altre istanze dello stesso tipo. cioè,

var liz = new employee('Elizabeth','Teacher',1980);
var jane = new employee('Jane','unknown',1981);

liz.salary è uguale a jane.salary , anche la memoria sottostante sarà la stessa.

ma quando si imposta salary di un'istanza, non si modifica la variabile salary nel prototipo, ma si definisce una nuova proprietà univoca per tale istanza. quindi, fred.salary = 20000 sarà solo nascondere l'attributo salary del prototipo.

quindi fred.salary farà in modo che il motore javascript cerchi lo stipendio nella struttura di istanze fred , sulla quale prenderà la proprietà diretta di tale istanza. mentre liz.salary si risolverà nella proprietà nel prototipo.

Spero che l'output della console abbia un senso.

    
risposta data 13.09.2012 - 15:19
fonte

Leggi altre domande sui tag