Skip to content

Commit fa29275

Browse files
finished translation
1 parent ec9a12a commit fa29275

File tree

1 file changed

+38
-38
lines changed
  • 1-js/04-object-basics/09-object-toprimitive

1 file changed

+38
-38
lines changed

1-js/04-object-basics/09-object-toprimitive/article.md

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,22 @@ Ce se întâmplă atunci când obiectele sunt adunate `obj1 + obj2`, scăzute `o
55

66
JavaScript nu prea permite să personalizeze cum operatorii lucrează pe obiecte. Spre deosebire de alte limbaje de programare, cum ar fi Ruby sau C++, nu putem implementa o metodă specială de obiect pentru a gestiona o adunare (sau alți operatori).
77

8-
In case of such operations, objects are auto-converted to primitives, and then the operation is carried out over these primitives and results in a primitive value.
8+
În cazul unor astfel de operații, obiectele sunt convertite automat în primitive, iar apoi operația este efectuată asupra acestor primitive și are ca rezultat o valoare primitivă.
99

10-
That's an important limitation, as the result of `obj1 + obj2` can't be another object!
10+
Aceasta este o limitare importantă, deoarece rezultatul a `obj1 + obj2` nu poate fi un alt obiect!
1111

12-
E.g. we can't make objects representing vectors or matrices (or achievements or whatever), add them and expect a "summed" object as the result. Such architectural feats are automatically "off the board".
12+
E.g., nu putem crea obiecte reprezentând vectori sau matrici (sau realizări sau orice altceva), să le adunăm și să ne așteptăm ca rezultat un obiect "însumat". Astfel de realizări arhitecturale sunt automat "în afara discuției".
1313

14-
So, because we can't do much here, there's no maths with objects in real projects. When it happens, it's usually because of a coding mistake.
14+
Așadar, pentru că nu putem face mare lucru aici, nu există matematică cu obiecte în proiectele reale. Atunci când se întâmplă, de obicei, este din cauza unei greșeli de codare.
1515

16-
In this chapter we'll cover how an object converts to primitive and how to customize it.
16+
În acest capitol vom acoperi modul în care un obiect se convertește în primitivă și cum să îl personalizăm.
1717

18-
We have two purposes:
18+
Avem două scopuri:
1919

20-
1. It will allow us to understand what's going on in case of coding mistakes, when such an operation happened accidentally.
21-
2. There are exceptions, where such operations are possible and look good. E.g. subtracting or comparing dates (`Date` objects). We'll come across them later.
20+
1. Ne va permite să înțelegem ce se întâmplă în cazul unor greșeli de codare, atunci când o astfel de operațiune s-a întâmplat accidental.
21+
2. Există excepții, unde astfel de operații sunt posibile și arată bine. E.g. scăderea sau compararea datelor (obiecte `Date`). Le vom întâlni mai târziu.
2222

23-
## Conversion rules
23+
## Reguli de conversie
2424

2525
În capitolul <info: tip-conversions> am văzut regulile pentru conversiile numerice, string și booleane ale primitivelor. Dar am lăsat un gol pentru obiecte. Acum, după cum știm despre metode și simboluri, devine posibil să o completăm.
2626

@@ -99,15 +99,15 @@ Să începem de la prima metodă. Există un simbol încorporat numit `Symbol.to
9999
100100
```js
101101
obj[Symbol.toPrimitive] = function(hint) {
102-
// here goes the code to convert this object to a primitive
102+
// iată codul pentru a converti acest obiect într-o primitivă
103103
// trebuie să returneze o valoare primitivă
104104
// hint = unul dintre "string", "number", "default"
105105
};
106106
```
107107

108-
If the method `Symbol.toPrimitive` exists, it's used for all hints, and no more methods are needed.
108+
Dacă există metoda `Symbol.toPrimitive`, aceasta este utilizată pentru toate indiciile și nu mai sunt necesare alte metode.
109109

110-
For instance, here `user` object implements it:
110+
De exemplu, aici obiectul `user` o implementează:
111111

112112
```js run
113113
let user = {
@@ -131,21 +131,21 @@ După cum putem vedea din cod, obiectul `user` devine un șir autodescriptiv sau
131131

132132
## toString/valueOf
133133

134-
If there's no `Symbol.toPrimitive` then JavaScript tries to find methods `toString` and `valueOf`:
134+
Dacă nu există `Symbol.toPrimitive`, atunci JavaScript încearcă să găsească metodele `toString` și `valueOf`:
135135

136-
- For the "string" hint: `toString`, and if it doesn't exist, then `valueOf` (so `toString` has the priority for string conversions).
137-
- For other hints: `valueOf`, and if it doesn't exist, then `toString` (so `valueOf` has the priority for maths).
136+
- Pentru indiciul "string": `toString`, iar dacă nu există, atunci `valueOf` (deci `toString` are prioritate pentru conversiile de stringuri).
137+
- Pentru alte indicii: `valueOf`, iar dacă nu există, atunci `toString` (astfel încât `valueOf` are prioritate pentru conversii matematice).
138138

139-
Methods `toString` and `valueOf` come from ancient times. They are not symbols (symbols did not exist that long ago), but rather "regular" string-named methods. They provide an alternative "old-style" way to implement the conversion.
139+
Metodele `toString` și `valueOf` provin din timpuri străvechi. Ele nu sunt simboluri (simbolurile nu existau cu mult timp în urmă), ci mai degrabă metode "obișnuite" cu nume de șir de caractere. Ele oferă o modalitate alternativă "în stil vechi" de a implementa conversia.
140140

141-
These methods must return a primitive value. If `toString` or `valueOf` returns an object, then it's ignored (same as if there were no method).
141+
Aceste metode trebuie să returneze o valoare primitivă. Dacă `toString` sau `valueOf` returnează un obiect, atunci este ignorată (la fel ca în cazul în care nu ar exista nicio metodă).
142142

143-
By default, a plain object has following `toString` and `valueOf` methods:
143+
În mod implicit, un obiect simplu are următoarele metode `toString` și `valueOf`:
144144

145-
- The `toString` method returns a string `"[object Object]"`.
146-
- The `valueOf` method returns the object itself.
145+
- Metoda `toString` returnează un șir de caractere `"[object Object Object]"`.
146+
- Metoda `valueOf` returnează obiectul în sine.
147147

148-
Here's the demo:
148+
Iată demonstrația:
149149

150150
```js run
151151
let user = {name: "John"};
@@ -154,22 +154,22 @@ alert(user); // [object Object]
154154
alert(user.valueOf() === user); // true
155155
```
156156

157-
So if we try to use an object as a string, like in an `alert` or so, then by default we see `[object Object]`.
157+
Așadar, dacă încercăm să folosim un obiect ca șir de caractere, cum ar fi într-un `alert` sau așa ceva, atunci, în mod implicit, vom vedea `[object Object]`.
158158

159-
The default `valueOf` is mentioned here only for the sake of completeness, to avoid any confusion. As you can see, it returns the object itself, and so is ignored. Don't ask me why, that's for historical reasons. So we can assume it doesn't exist.
159+
Valoarea implicită `valueOf` este menționată aici doar de dragul completării, pentru a evita orice confuzie. După cum puteți vedea, acesta returnează obiectul în sine, deci este ignorat. Nu mă întrebați de ce, aceea este din motive istorice. Deci putem presupune că nu există.
160160

161-
Let's implement these methods to customize the conversion.
161+
Haideți să implementăm aceste metode pentru a personaliza conversia.
162162

163-
For instance, here `user` does the same as above using a combination of `toString` and `valueOf` instead of `Symbol.toPrimitive`:
163+
De exemplu, aici `user` face același lucru ca mai sus, folosind o combinație de `toString` și `valueOf` în loc de `Symbol.toPrimitive`:
164164

165165
```js run
166166
let user = {
167167
name: "John",
168-
money: 1000,
168+
bani: 1000,
169169

170170
// pentru indiciu="string"
171171
toString() {
172-
return `{name: "${this.name}"}`;
172+
return `{nume: "${acest.nume}"}`;
173173
},
174174

175175
// pentru indiciu="number" sau "default"
@@ -217,31 +217,31 @@ Din motive istorice, dacă `toString` sau `valueOf` returnează un obiect, nu es
217217
În contrast, `Symbol.toPrimitive` *trebuie* să returneze o primitivă, altfel va exista o eroare.
218218
```
219219

220-
## Further conversions
220+
## Alte conversii
221221

222-
As we know already, many operators and functions perform type conversions, e.g. multiplication `*` converts operands to numbers.
222+
După cum știm deja, mulți operatori și funcții efectuează conversii de tip, e.g. înmulțirea `*` convertește operanzii în numere.
223223

224-
If we pass an object as an argument, then there are two stages:
225-
1. The object is converted to a primitive (using the rules described above).
226-
2. If the resulting primitive isn't of the right type, it's converted.
224+
Dacă trecem un obiect ca argument, atunci există două etape:
225+
1. Obiectul este convertit într-o primitivă (folosind regulile descrise mai sus).
226+
2. Dacă primitiva rezultată nu este de tipul corect, aceasta este convertită.
227227

228228
De exemplu:
229229

230230
```js run
231231
let obj = {
232-
// toString handles all conversions in the absence of other methods
232+
// toString se ocupă de toate conversiile în absența altor metode
233233
toString() {
234234
return "2";
235235
}
236236
};
237237

238-
alert(obj * 2); // 4, object converted to primitive "2", then multiplication made it a number
238+
alert(obj * 2); // 4, obiect convertit în primitivul "2", apoi înmulțirea l-a transformat în număr
239239
```
240240

241-
1. The multiplication `obj * 2` first converts the object to primitive (that's a string `"2"`).
242-
2. Then `"2" * 2` becomes `2 * 2` (the string is converted to number).
241+
1. Înmulțirea `obj * 2` convertește mai întâi obiectul în primitivă (care este un șir de caractere `"2"`).
242+
2. Apoi `"2" * 2` devine `2 * 2` (șirul este convertit în număr).
243243

244-
Binary plus will concatenate strings in the same situation, as it gladly accepts a string:
244+
Binary plus va concatena șiruri de caractere în aceeași situație, deoarece acceptă cu plăcere un șir de caractere:
245245

246246
```js run
247247
let obj = {
@@ -250,7 +250,7 @@ let obj = {
250250
}
251251
};
252252

253-
alert(obj + 2); // 22 ("2" + 2), conversion to primitive returned a string => concatenation
253+
alert(obj + 2); // 22 ("2" + 2), conversia în primitivă a returnat un șir => concatenare
254254
```
255255

256256
## Rezumat

0 commit comments

Comments
 (0)