Imediat după aceea, am creat o funcție, aceasta este o proprietate a prototipului. care a înregistrat un obiect:
Cu toate acestea, această proprietate ca gopher, care este în ciuda faptului că el nu poate vedea:
Dacă încercați să învețe cum obiectul care se află în această proprietate, se poate părea că este - gol:
Orice pyhar spune cu încredere, „Am creat un obiect și care este o instanta a clasei Foo.“ De fapt, în cele 7 simboluri „nou foo“ încheie următoarea magie:
„Prototip“ de la alineatul 2 - este un obiect, care va căuta proprietățile obiectului a. că el nu conține în mod explicit. Codul de mai jos ilustrează toate acestea mai complet:
OK, cam dat seama ce este „obiectul prototip“, de unde vine și de ce ai nevoie. Cum să-l vezi? Într-o lume perfecta am putea referi la obj.prototype și de a obține prototipul unui obiect. Dar, din păcate, așa cum am văzut mai sus, cu aceeași proprietate nume este utilizat în alt mod - susține că funcția de constructor va face obiectul prototip. Acest lucru sugerează că puteți obține un prototip de designer prin intermediul .prototype. încercați:
Se pare a fi de lucru. Dar ce se întâmplă dacă am încercat să descrie moștenire, care se extinde Foo un alt „clasă“?
Este timpul să ne gândim la asta, în cazul în care, de fapt, indică a.constructor. Și, de fapt, nu se va indica, pentru că nici o astfel de proprietate, este luat din lanțul de prototip. In exemplul de mai sus „prototip o“ - acest caz Bar (deoarece rezultatul Foo.prototype noii Bar). De asemenea, nu au o instanță de constructor Bar proprietate. Dar este la instanță a Baroului prototip - deoarece Bar.prototype (prototip exemplu Bar) are proprietatea .constructor arătând spre Bar ( „proprietate -gopher“, pe care am scris la început).
Dacă credeți că fakap în acest exemplu sa întâmplat datorită faptului că suntem „extins“, „de clasă“, „instanță“ (da, toate - în ghilimele!). Logic pentru a „extinde“, „de clasă“, „clasa“, dar de fapt nu se schimba - pentru a obj.constructor.prototype în căutarea unui prototip nu ne putem baza. Deoarece obj.constructor - nu este o „funcție care creează obj“, iar în cel mai bun caz - „funcție pentru a crea un prototip obj“ (așa cum se menționează în docuri la MDN). În cel mai bun caz - pentru că, de fapt, nu poate fi orice:
Înainte de apariția acestui lucru dezvoltatorii au avut doar proprietatea .__ proto__, care funcționează numai în browsere în formă de Mozilla.
Este timpul pentru sammari tip.
Care este „prototipul obj“?
Este un obiect la care se aplică JS pentru proprietățile care nu au aproape de obj.
Ce este obj.prototype?
În cazul în care obj - o facilitate care obj.prototype - ceea ce ar deveni prototipul unui obiect atunci când apelați nou obj ().
Ca cross-browser pentru a obține o referință la obiectul prototip?
:) nu are nevoie de multe ori beneficiul.
Ce este obj .__ proto__?
Acesta este un prototip al obj, dacă aveți Mozilla
Ce este Object.getPrototypeOf (obj)
Este o modalitate de a obține o referință la obj prototip, care va deveni un cross-browser după moartea lui IE8 (bine, până la FF 3.5)
De ce știu toate astea? o_0
În cazul în care crearea de site-uri - munca ta este. ai toate nafig nu au nevoie :) Dacă numai pentru învățământul general, și a capului pentru a rupe în timpul tău liber știu.
Aș spune calea cea dreaptă - misterios descriere caietul de sarcini JS. Și, desigur, adauga aici calitatea traducerii (pentru care doar traducătorii nu pot fi blamate de drum).
Unul devine impresia. creatorilor de limbi străine fac totul pentru ea utilizatorilor a fost greu de înțeles.
Printre noi și neobișnuite. dar logică în concepte de mediu OOP. Ar trebui să fie atribuită în opinia mea - polimorfism.
„De îndată ce am creat funcția, deoarece are o proprietate prototip, care a înregistrat un obiect“
Proprietatea Prototipul funcției a fost întotdeauna. Nu uita. Funcția în sine este un obiect.
„OK, un fel de dat seama ce este“ obiectul prototip“, de unde vine și de ce avem nevoie. Și ceasul? Într-o lume perfecta am putea referi la obj.prototype și de a obține prototipul unui obiect. Dar, din păcate, așa cum am văzut mai sus, proprietatea cu același nume este utilizat în alt mod - susține că funcția de constructor va face prototipul obiectului ".
Nu știu o greșeală de scriere sau o greșeală aici. Dar, rețineți că trebuie să - am creat cu funcția de prototip obiect de proprietate numit, de asemenea. Cu toate acestea, această proprietate indică următorul obiect de nivel superior în lanțul prototip (de obicei Object).
Nu știu o greșeală de scriere sau o greșeală aici. Dar, rețineți că trebuie să - am creat cu funcția de prototip obiect de proprietate numit, de asemenea. Cu toate acestea, această proprietate indică următorul obiect de nivel superior în lanțul prototip (de obicei Object).
Vă rugăm să clar acest paragraf din cea anterioară. el este cu siguranță greșit și se referă la obiectul prototip