Daniel Ehrenberg

Etapa 3

Pastrarea statului si a comportamentului in confidentialitate pentru o clasa permite autorilor bibliotecii sa prezinte o interfata clara si stabila, in timp ce isi schimba codul in timp din culise. Propunerea de campuri de clasa ofera campuri private pentru clase si instante, iar aceasta propunere se bazeaza pe aceasta adaugand metode private si accesori (getter / setatori) la JavaScript. Cu aceasta propunere, orice element de clasa poate fi privat.

Pentru discutii despre detalii semantice, consultati DETALII.md. Acest document se concentreaza mai mult pe experienta si intuitia utilizatorului final.

Un exemplu de indrumare: elemente personalizate cu clase

Pentru a defini un widget de contor care creste atunci cand faceti clic, puteti defini urmatoarele cu ES2015:

clasa Counter extinde HTMLElement {get x () {return this.xValue; } set x (value) {this.xValue = value; window.requestAnimationFrame (this.render.bind (this)); } clicked () {this.x ++; } constructor () {super (); this.onclick = this.clicked.bind (this); this.xValue = 0; } connectedCallback () {this.render (); } render () {this.textContent = this.x.toString (); }} window.customElements.define (‘num-counter’, Counter);

Declaratii de teren

Cu propunerea campurilor clasei, exemplul de mai sus poate fi scris ca

clasa Counter extinde HTMLElement {xValue = 0; get x () {return this.xValue; } set x (value) {this.xValue = value; window.requestAnimationFrame (this.render.bind (this)); } clicked () {this.x ++; window.requestAnimationFrame (this.render.bind (this)); } constructor () {super (); this.onclick = this.clicked.

guarras masturbandose pajas trans
violada xxx pelis porno españolas
megan montaner follando maduras americanas
esposas compartidas incesto madre hijos
videos prono trio por sorpresa
xxx incesto real xxx torrent magnet
madres incestuosas incesto jovencitas
vecinas cachondas abuelas a cuatro patas
monica hoyos porno porno español dinero
pilladas cagando pillados follando
folladas extremas videos heroticos
corridas en la garganta suegras españolas follando
enseñando a follar pilladas cagando
jolla pr viejas muy calientes
mujer masturbandose porno por el culo
violadas xxx travestis meando
pornolesvianas mujeres peludas follando
potno peliculas porno traducidas al castellano
maduras españolas anal peliculas eroticas alemanas
guarras.com videos porno trios español

bind (this); } connectedCallback () {this.render (); } render () {this.textContent = this.x.toString (); }} window.customElements.define (‘num-counter’, Counter);

In exemplul de mai sus, puteti vedea un camp declarat cu sintaxa x = 0. De asemenea, puteti declara un camp fara initializator ca x. Prin declararea campurilor in avans, definitiile clasei devin mai autodocumentate; instantele trec prin mai putine tranzitii de stat, deoarece campurile declarate sunt intotdeauna prezente.

Metode si campuri private

Exemplul de mai sus are cateva detalii de implementare expuse lumii care ar putea fi mai bine pastrate intern. Utilizand campuri si metode private ESnext, definitia poate fi rafinata la:

class Counter extinde HTMLElement {#xValue = 0; obtine #x () {returneaza #xValue; } set #x (valoare) {this. # xValue = value; window.requestAnimationFrame (this. # render.bind (this)); } #clicked () {this. # x ++; } constructor () {super (); this.onclick = this. # clicked.bind (this); } connectedCallback () {this. # render (); } #render () {this.textContent = this. # x.toString (); }} window.customElements.define (‘num-counter’, Counter);

Pentru a face metode, getter / setere sau campuri private, pur si simplu dati-le un nume incepand cu #.

Cu toata implementarea sa pastrata interna clasei, acest element personalizat poate prezenta o interfata care este practic la fel ca un element HTML incorporat. Utilizatorii elementului personalizat nu au puterea de a se amesteca cu niciunul dintre elementele sale interne.

Retineti ca aceasta propunere ofera campuri si metode private doar asa cum au fost declarate in avans intr-o declaratie de camp; campurile private nu pot fi create ulterior, ad-hoc, prin atribuirea lor, asa cum pot proprietatile normale. De asemenea, nu puteti declara campuri sau metode private in literele obiectului; de exemplu, daca va implementati clasa pe baza literelor obiectului, sau adaugand metode individuale la prototip sau utilizand un cadru de clasa, nu puteti utiliza metode private, campuri sau accesori.

Relatia cu alte propuneri

Decoratorii nu fac parte din aceasta propunere, dar sunt concepute pentru a le permite decoratorilor sa lucreze deasupra ei. Vedeti caracteristicile claselor unificate pentru o explicatie a modului in care ar functiona impreuna.

Aceasta propunere adauga doar metode de instanta private , omitand metodele statice private, care sunt luate in considerare in propunerea de caracteristici de clasa statica.

stare

Consens in TC39

Aceasta propunere a ajuns la etapa a 3-a in septembrie 2017. De atunci, au existat o gandire extinsa si discutii indelungate cu privire la diferite alternative, inclusiv:

  • Clasele JS 1.1
  • Reconsiderarea „privatului static”
  • Utilizarea suplimentara a cuvantului cheie privat
  • Simboluri private

La examinarea fiecarei propuneri, delegatii TC39 au analizat profund motivatia, feedback-ul dezvoltatorilor JS si implicatiile asupra viitorului proiectarii limbajului. In cele din urma, acest proces de gandire si implicarea continua a comunitatii au condus la un consens reinnoit cu privire la propunerea din acest depozit. Pe baza acestui consens, implementarile merg mai departe cu privire la aceasta propunere.

Implementari

Mai multe implementari sunt in curs de dezvoltare:

  • Babel de Tim McClure
    • Metode private adaugate in v7.2.0
    • Accesorii privati (adaugati in V7.3.0)
  • In curs in TypeScript de Bloomberg
  • Suport suplimentar pentru scule
  • Livrare in V8
  • SA:
    • Metode private – complete si in curs de examinare.
    • Accesorii privati – completa si in curs de examinare.
  • Moddable XS – implementare completa.
  • QuickJS – implementare completa.

Activitate binevenita in acest depozit

Sunteti incurajati sa inregistrati probleme si PR-uri in acest depozit

  • Puneti intrebari despre propunere, cum functioneaza sintaxa, ce inseamna semantica etc.
  • Propuneti si discutati mici modificari sintactice sau semantice, in special cele motivate de experienta implementarii sau utilizarii propunerii.
  • Elaborati documentatie imbunatatita, cod de esantion si alte modalitati de a introduce programatori la toate nivelurile in aceasta caracteristica.

Daca aveti idei suplimentare despre cum sa imbunatatiti JavaScript, consultati CONTRIBUTING.md a ecma262 pentru a va implica.