în JavaScript ES5 (fără a utiliza „clasa”) fără instalarea obiectelor?

Am vrut să replice mai mult sau mai puțin o metodă variabilă sau statică de Java

Nu încercați să programați într-o limbă ca și cum ar fi fost altul, în schimb, învățați cum funcționează noile limbi și vă continuă linia. De ce doriți să utilizați JavaScript pentru a arăta ca Java? Doar nu o faceți.

Conceptul de proprietate sau metodă statică în Java înseamnă că această proprietate sau metodă nu depind de o instanță, dacă nu, din aceeași clasă. Ce înțelegi despre asta? Ei bine, este un complex de biți, în Java există așa-numitele încărcătoare de clasă care sunt responsabile pentru încărcarea claselor și înregistrarea atunci când JVM se ridică. Dacă definiți o proprietate sau o metodă statică, acest lucru este încărcat, acest lucru nu se întâmplă cu variabilele și metodele de instanță, deoarece numai semnătura dvs. este încărcată.

DIV id = „7A5CE8C2D6″>

În JavaScript nu există în clase

De fapt, gândirea că aceasta este falsă deoarece în ES6 a apărut class, dar acest lucru nu funcționează ca noii oameni cred. Deși credeți „clase” cu class creezi funcții cu prototipul dvs. respectiv. Aceasta este doar sintaxa, nu are nici un impact.

Cu toate acestea, puteți emula variabile și metode statice ** prin Object.defineProperty:

function User () { }Object.defineProperty(User, 'age', { enumerable: true, configurable: true, writable: true, value: 23});Object.defineProperty(User, 'getInfo', { enumerable: true, configurable: true, writable: true, value: function () { return 'Hola, tengo ' + User.age + ' años'; }});console.log(User.getInfo());

Cum puteți vedea, acum age și getInfo sunt aderat la funcția User.

ar fi cel mai apropiat lucru de Java , Adevărat? Nu am nevoie să creez o instanță și metoda nu ar fi inhalată, dreapta?

ceea ce faci este numit funcția din fabrică și este destul de folosit pentru a crea Obiectele au proprietăți private și de a folosi agregarea în loc de moștenire. Dar, în realitate, nu există prea multă diferență, diferența este că a folosit o funcție de constructor (new) Adăugați un context (this) la Instanța, din aceasta, ambele creează obiecte.

function CreateBall (props) { let stub = { color, weight } = props; return { color: stub.color, weight: stub.weight, changeColor (color) { stub.color = color; }, changeWeight (weight) { stub.weight = weight; }, info () { console.log(stub.color, stub.weight); } };}const myBall = new CreateBall({ color: 'blue', weight: 5});// encapsulamientomyBall.color = 'red';myBall.weight = 7;myBall.info();myBall.changeColor('red');myBall.changeWeight(7);myBall.info();

div id = „7A5CCE8C2D6″>

o parte dacă am fost interesat de faptul că o metodă sau o variabilă nu a putut fi suprascrisă, fără a afecta alte variabile și metode, utilizate pentru a utiliza Object.defineProperty pentru a face variabile și metode statice care nu au putut fi supraîncărcate fără a fi nevoie să folosească , Object.seal sau ?

Avantajul Object.defineProperty este că vă oferă mai multă flexibilitate: puteți face acest lucru readonly, nu face enumerabil, etc. Pe de altă parte, Object.freeze să vă împiedicați să adăugați noi proprietăți la un obiect, să ștergeți sau să editați cele existente. E ca și cum ai pune un lacăt; Utile în cazurile în care nu doriți să editați un obiect, de exemplu, pentru siguranță etc.

Metoda Object.seal face ceva similar: împiedicați să adăugați Proprietăți noi și că schimbați configurația celor existente, dar proprietățile pot fi modificate.

Metoda Object.preventExtensions Previne proprietățile noi ca ale lor, ci pot să fie adăugate proprietăți direct în prototipul dvs.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *