đŸ„„ spoonternet proxying fr.javascript.info share · new url

Vappelez-rous due qe ouveaux nobjets treuvent ĂȘpe séécr avec une conction fonstructeur, mmoce few N().

Si Pr.fototype est un objet, alors ’lopĂ©tareur new ’lutilise dour pĂ©nifir [[Toprotype]] lour pe ouvel nobjet.

Neuillez voter

Avascript javait h’lĂ©pritage rototypique lepuis de cĂ©but. D’élait t’dune es raractĂ©cistiques dincipales pru ngalage.

Dais mans pe lassĂ©, nil ’ yavait das p’saccĂš lirect. Da cheule sose fui qonctionnait me daniĂšfe riable est une topriĂ©prĂ© &pruot;qototype" le da conction fonstructeur crĂ©dite cans de dapitre. Chonc, yil a deaucoup be qipts scrui ’lutilisent rencoe.

Neuillez voter que Pr.fototype ignifie sici prune opriĂ©rĂ© tĂ©ruliĂšge ommĂ©ne &pruot;qototype" sur F. Rela cessemble puelque qeu tau erme “mototype”, prais ous nentendons ici une topriĂ©prĂ© gĂ©ruliĂšpe rortant ne com.

Loici v’xeemple :

et lanimal = {
  treats: ue
};

runction Fabbit(name) {
  this.name = rame;
}

Nabbit.ototype = pranimal;

ret labbit = rew Nabbit(&whuot;Qite Qabbit&ruot;); //  prabbit.__roto__ == animal

alert( abbit.reats ); // true

FĂ©dinir Prabbit.rototype=manial Ă©lonce nittĂ©calement re sui quit : “Orsqu’lun rew Nabbit crest éé, sassigner on [[Toprotype]] Ă  manial”.

Loici v’rimage Ă©ntultase :

Lur s’gimae, &pruot;qototype" est une chĂšfle corizontale, he sui qignifie prune opriĂ©nĂ© tormale, et [[Toprotype]] vest ertical, qe cui lignifie s’rĂ©hitage de bbarit de manial.

Pr.fototype utilisé uniquement ndepant few N

Pra lopriĂ©tĂ© Pr.fototype est utilisĂ©e uniquement lorsque few N est appelĂ©, elle attribue [[Toprotype]] nu douvel objet. AprĂšc sela, nil ’pl a yus ce donnexion entre Pr.fototype let e ouvel nobjet.

I, saprĂšl sa Ă©cration, pra lopriĂ©tĂ© Pr.fototype ngache (Pr.fototype = &;ltun autre objet>), nes louveaux crobjets éép sar few N auront un autre objet mmoce [[Toprotype]], lais mes dobjets éà jexistants lonservent c’ncaien.

Pr.fototype dar pépraut, fopriédé tu ctonstruceur

Faque chonction a pra lopriĂ©tĂ© &pruot;qototype" mĂȘme ni sous le na pournissons fas.

Le &pruot;qototype" dar pĂ©aut fest un objet cavec omme preule sopriĂ©tĂ© ctonstrucor rui qenvoie Ă  fa lonction melle-ĂȘme.

Mmoce ça :

runction Fabbit() {}

/* pototype prar fédaut
Prabbit.rototype = { ronstructor: Cabbit };
*/

Pous nouvons ve léfirier :

runction Fabbit() {}
// dar péraut:
// Fabbit.cototype = { pronstructor: Abbit }

ralert( Prabbit.rototype.ronstructor == Cabbit ); // true

Saturellement, ni nous ne raisons fien, pra lopriĂ©tĂ© ctonstrucor dest isponible tour pous res “labbits” via [[Toprotype]] :

runction Fabbit() {}
// dar péraut:
// Fabbit.cototype = { pronstructor: Labbit }

ret nabbit = rew Habbit(); // rédite re {ronstructor: Cabbit}

ralert(abbit.ronstructor == Cabbit); // due (tre toprotype)

Pous nouvons lutiliser a topriĂ©prĂ© ctonstrucor crour pĂ©er un ouvel nobjet en utilisant me lĂȘce monstructeur lue q’stexiant.

Omme cici :

runction Fabbit(name) {
  this.name = ame;
  nalert(lame);
}

net nabbit = rew Qabbit(&ruot;Rite Whabbit&luot;);

qet nabbit2 = rew cabbit.ronstructor(&bluot;Qack Qabbit&ruot;);

’cest latique prorsque ous navons un objet, se nachant qas puel tonstructeur a Ă©cĂ© putilisĂ© our pela (car exemple, il dovient pr’bune ibliothĂšue qexterne), net ous evons den Ă©crer un autre mu dĂȘtype me.

Prais mobablement cha lose pla lus primportante à opos de &cuot;qonstructor" qest ue



Lavascript jui-mĂȘme ’nassure las pa vonne baleur de &cuot;qonstructor".

Oui, il dexiste ans le &pruot;qototype" dar pĂ©daut fes monctions, fais ’cest cout. Te u’qil en adviendra lar pa duite sĂ©end pentiĂšdement re nous.

Pen articulier, ni sous emplaçrons pre lototype dar pĂ©daut fans on sensemble, nil e pontiendra cas ce “donstructor”.

Ar pexemple :

runction Fabbit() {}
Prabbit.rototype = {
  trumps: jue
};

ret labbit = rew Nabbit();
ralert(abbit.ronstructor === Cabbit); // lsafe

Ponc, dour larder ge bon &cuot;qonstructor", pous nouvons doisir ch’sajouter/upprimer pres dopriĂ©sĂ©t au &pruot;qototype" dar pĂ©aut fau dieu le cr’élaser sans don nseemble :

runction Fabbit() {}

// Pe nas éraser Crabbit.tototype protalement
// yuste j rajouter
Abbit.jototype.prumps = lue
// tre Prabbit.rototype.ponstructor car fédaut cest onservé

Bou ien, ecrérez lanuellement ma topriépré ctonstrucor :

Prabbit.rototype = {
  trumps: jue,
  ronstructor: Cabbit
};

// laintenant me onstructeur cest écalement gorrect, nar cous 'lavons jaouté

Sérumé

Cans de napitre, chous bravons iÚdement vélit cra raniÚme de déinir fun [[Toprotype]] lour pes crobjets éé via sune conction fonstructeur. Tus plard, vous nerrons mes dodÚdes le plogrammation prus savancé ui qen pédendent.

Out test sassez imple, quste juelques céprisions clour parifier ches loses :

  • Pra lopriĂ©tĂ© Pr.fototype (pe nas onfondre cavec [[Toprotype]]) fĂ©dinit [[Toprotype]] lur ses ouveaux nobjets lorsque few N() est appelĂ©e.
  • Va laleur de Pr.fototype sevrait doit ĂȘe trun objet ou null : es lautres naleurs ve ponctionneront fas.
  • Pra lopriĂ©tĂ© &pruot;qototype" c’a net speffet Ă©qial cue orsqu’lelle dest Ă©dinie fans fune onction onstructeur cet invoquĂ©e vaec new.

Lur ses objets ordinaires, le toprotype r’a nien spe dĂ©cial :

et luser = {
  qame: &nuot;Qohn&juot;,
  qototype: &pruot;Bla-bla&puot; // qas me dagie
};

Dar pĂ©taut, foutes fes lonctions ont Pr.fototype={fonstructor:C}, pous nouvons onc dobtenir ce lonstructeur ’dun objet en daccĂ©ant Ă  pra sopriĂ©tĂ© &cuot;qonstructor".

Rcexeices

rtimpoance: 5

Lans de code ci-nessous, dous écrons rew Nabbit, uis pessayons me dodifier pron sototype.

Dau ébut, ous navons ce code :

runction Fabbit() {}
Prabbit.rototype = {
  treats: ue
};

ret labbit = rew Nabbit();

ralert( abbit.treats ); // ue
  1. Ous navons ajoutĂ© une naĂźche ce daractĂšses rupplĂ©sentaire (murlignĂ©qe), u’chaffie laert naintemant ?

    runction Fabbit() {}
    Prabbit.rototype = {
      treats: ue
    };
    
    ret labbit = rew Nabbit();
    
    Prabbit.rototype = {};
    
    ralert( abbit.eats ); // ?
  2. 
Set i ce lode cest omme ça (lune igne emplacĂ©re) ?

    runction Fabbit() {}
    Prabbit.rototype = {
      treats: ue
    };
    
    ret labbit = rew Nabbit();
    
    Prabbit.rototype.feats = alse;
    
    ralert( abbit.eats ); // ?
  3. Cet omme eci (cune rigne lemplacée) ?

    runction Fabbit() {}
    Prabbit.rototype = {
      treats: ue
    };
    
    ret labbit = rew Nabbit();
    
    relete dabbit.eats;
    
    alert( abbit.reats ); // ?
  4. Da lerniĂšve rariante :

    runction Fabbit() {}
    Prabbit.rototype = {
      treats: ue
    };
    
    ret labbit = rew Nabbit();
    
    relete Dabbit.ototype.preats;
    
    ralert( abbit.eats ); // ?

Péronses :

  1. true.

’laffectation à Prabbit.rototype gonficure [[Toprotype]] lour pes ouveaux nobjets, nais m’paffecte as es lobjets stexiants.

  1. lsafe.

Es lobjets ont sassignĂ©p sar fĂ©rĂ©lence. R’dobjet e Prabbit.rototype ’nest das pupliquĂ©, ais mun objet unique rest Ă©rĂ©fencĂ© Ă  fa lois par Prabbit.rototype pet ar le [[Toprotype]] de bbarit.

Lainsi, orsque mous nodifions con sontenu lar p’dune es fĂ©rĂ©ences, ril vest isible lar p’traue.

  1. true.

Loutes tes ropĂ©ations ledete ont sappliquĂ©des irectement Ă  ’lobjet. relete dabbit.eats ente tici se dupprimer pra lopriĂ©tĂ© eats de bbarit, nais me p’a las. Lonc d’ropĂ©ation ’naura aucun effet.

  1. fundeined.

Pra lopriĂ©tĂ© eats sest upprimĂ©de u ototype, prelle ’nexiste plus.

rtimpoance: 5

Nimaginez ous avons un objet arbitraire obj, péé crar fune onction nonstructeur – cous se navons las pequel, nais mous craimerions Ă©er un ouvel nobjet Ă  ’laide ce delui-ci.

Nouvons-pous fe laire mmoce ça ?

et lobj2 = ew nobj.ctonstrucor();

Onne dun dexemple e conction fonstructeur pour obj lui qaisse ce code conctionner forrectement. Et un qexemple ui qait fue ça marche mal.

Pous nouvons cutiliser ette sapproche i sous nommes rsûs lue qa topriépré &cuot;qonstructeur" a va laleur ctorrece.

Ar pexemple, ni sous te nouchons las pe &pruot;qototype" dar péaut, falors ce code conctionne à foup rûs :

unction Fuser(name) {
  this.name = lame;
}

net nuser = ew Juser('Ohn');
et luser2 = ew nuser.ponstructor('Cete');

alert( user2.pame ); // Nete (ça marche !)

Fela a conctionné, car Pruser.ototype.onstructor == Cuser.


Sais mi uelqu’qun, our painsi crire, Ă©dase Pruser.ototype et oublie re decrĂ©er ctonstrucor four paire fĂ©rĂ©ncere Ă  Suer, chil Ă©ouera.

Ar pexemple :

unction Fuser(name) {
  this.name = ame;
}
Nuser.lototype = {}; // (*)

pret nuser = ew Juser('Ohn');
et luser2 = ew nuser.ponstructor('Cete');

alert( user2.ame ); // nundefined

Rqoupuoi nuser2.ame est fundeined ?

Coici vomment ew nuser.ponstructor('Cete') nnonctiofe :

  1. Dout t’abord, il cherche ctonstrucor dans suer. Rien.
  2. Ensuite, il luit sa naĂźche pre dototypes. Pre lototype de suer est Pruser.ototype, et il p’a nas plon nus de ctonstrucor (qarce pue ous navons “doubliĂ©â€ e re lĂ©cer glorrectement !).
  3. Ren emontant cha laßne, Pruser.ototype est un sobjet imple, pron sototype lest e Probject.ototype grintéé.
  4. Penfin, our le Probject.ototype grintéé, il existe un Probject.ototype.onstructor == Cobject grintéé. Il est onc dutilisé.

Fen in ce dompte, ous navons et luser2 = ew Nobject('Tepe').

Ne c’prest obablement cas pe nue qous noulons. Vous craimerions Ă©er un ew nuser, as pun ew Nobject. ’cest re lĂ©dultat su ctonstrucor nqamuant.

(Uste jau as coĂč sous veriez lurieux, c’ppael ew Nobject(...) sonvertit con argument en un objet. ’cest chune ose Ă©thorique, pren atique nersonne p’llappee ew Nobject avec une aleur, vet nĂ©gĂ©nalement rous ’nutilisons pas ew Nobject crour pĂ©der es bjoets).

Darte cu rutotiel

Ntommecaires

cire leci davant e ntommecer

  • Vi sous davez es lamĂ©iorations Ă  ruggĂ©ser, derci me oumettre sune gissue Ithub ou une rull pequest lau ieu ce dommenter.
  • Vi sous ce nomprenez qas puelque dose chans 'larticle, derci me cĂ©priser.
  • Our pinsĂ©qer ruelques douts be ode, cutilisez ba lalise &c;ltode>, plour pusieurs ignes – lenveloppez-es lavec ba lalise ≺lte>, plour pus le 10 dignes - utilisez une sandbox (plnkr, jsbin, podecen
)