.crea()

Un obiect nou creat dintr-un obiect personalizat (mai ales cel creat de null obiect, care este de fapt un obiect personalizat cu NR. de membri) se pot comporta în moduri neașteptate. Acest lucru este valabil mai ales la depanare, deoarece funcțiile comune de conversie/detectare a utilităților obiect-proprietate pot genera erori sau pot pierde informații (mai ales dacă se utilizează capcane de eroare silențioase care ignoră Erorile). De exemplu, aici sunt două obiecte:

așa cum se arată mai sus, totul pare normal până acum., Cu toate acestea, atunci când încearcă să folosească aceste obiecte, diferențele devin rapid evidente:

> "oco is: " + oco // shows "oco is: "> "ocn is: " + ocn // throws error: Cannot convert object to primitive value

Testare doar câteva din multe cele mai de bază funcții built-in arată magnitudinea de problema mai clar:

Cum am spus, aceste diferențe pot face debugging chiar simplu, aparent probleme du-te repede în rătăcire. De exemplu:

Un simplu comun depanare funcția:

Nu atât de simple rezultate: (mai ales daca taceai eroare-capcană a ascuns mesaje de eroare)

(Dar dacă același obiect este creat într-o ordine diferită, cel puțin în unele implementări.,..)

Rețineți că o astfel de ordine diferite pot apărea static prin disparate fix codificările cum ar fi aici, dar, de asemenea, în mod dinamic, prin intermediul indiferent de comanda orice astfel de proprietate-adăugarea de cod-ramuri obține de fapt, executat la runtime ca depinde de intrări și/sau aleatoare variabile. Apoi, din nou, ordinea de iterație reală nu este garantată indiferent de ce se adaugă membrii comenzii.

fiți conștienți, de asemenea, că folosind obiect.intrări () pe un obiect creat prin obiect.create () va duce la returnarea unui tablou gol.,

var obj = Object.create({ a: 1, b: 2 });> console.log(Object.entries(obj)); // shows ""

Unele NON-soluții

O soluție bună pentru lipsă de obiect-metode nu este imediat evident.,

Adăugarea lipsă de obiect-metoda direct din standard-obiect NU funcționează:

Adăugarea lipsă de obiect-metoda direct la obiect nou e „prototip” nu funcționează, fie, din moment ce noul obiect nu are un prototip real (care este de fapt cauza TUTUROR acestor probleme) și nimeni nu poate fi adăugat direct:

Adăugarea lipsă de obiect-metodă prin utilizarea standard-obiect ca obiect nou prototip nu merge nici:

Unele OK soluții

din Nou, adăugând lipsă de obiect-metoda direct din standard-obiect NU funcționează., Cu toate acestea, adăugarea directă a metodei generice face:

cu toate acestea, setarea prototipului generic ca prototip al noului obiect funcționează și mai bine:

(pe lângă toate funcțiile legate de șir prezentate mai sus, aceasta adaugă și:)

așa cum se arată, obiectele modificate în acest fel arată acum foarte mult ca obiecte obișnuite.

Lasă un răspuns

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