Skip to content

Commit c548e36

Browse files
authored
Merge #533 from javascript-tutorial/sync-ef8d5768
Sync with upstream @ ef8d576 *nevermore*
2 parents 519443b + 2bb6141 commit c548e36

15 files changed

Lines changed: 142 additions & 60 deletions

File tree

1-js/02-first-steps/04-variables/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Ahora podemos introducir datos en ella al utilizar el operador de asignación `=
2424
let message;
2525

2626
*!*
27-
message = 'Hola'; // almacena la cadena
27+
message = 'Hola'; // almacenar la cadena 'Hola' en la variable llamada message
2828
*/!*
2929
```
3030

1-js/04-object-basics/06-constructor-new/1-two-functions-one-object/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ importance: 2
44

55
# Dos funciones – un objeto
66

7-
Es posible crear las funciones `A` y `B` como `new A()==new B()`?
7+
¿Es posible crear las funciones `A` y `B` para que se cumpla `new A() == new B()`?
88

99
```js no-beautify
1010
function A() { ... }

1-js/05-data-types/05-array-methods/12-reduce-object/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ importance: 4
44

55
# Crea un objeto a partir de un array
66

7-
Supongamos que recibimos un array de usuarios con la forma `{id:..., name:..., age... }`.
7+
Supongamos que recibimos un array de usuarios con la forma `{id:..., name:..., age:... }`.
88

99
Crea una función `groupById(arr)` que cree un objeto, con `id` como clave (key) y los elementos del array como valores.
1010

1-js/07-object-properties/01-property-descriptors/article.md

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ alert(Object.keys(user)); // name
194194

195195
Los indicadores no configurables (`configurable:false`) a veces es un preajuste para los objetos propiedades incorporadas.
196196

197-
Una propiedad no configurable no puede ser eliminada ni cambiada por `defineProperty`.
197+
Una propiedad no configurable no puede ser eliminada, sus atributos no pueden ser modificados.
198198

199199
Por ejemplo, `Math.PI` es de solo lectura, no enumerable y no configurable:
200200

@@ -214,20 +214,23 @@ alert( JSON.stringify(descriptor, null, 2 ) );
214214
Así que, un programador es incapaz de cambiar el valor de `Math.PI` o sobrescribirlo.
215215

216216
```js run
217-
Math.PI = 3; // Error
217+
Math.PI = 3; // Error, porque tiene writable: false
218218

219219
// delete Math.PI tampoco funcionará
220220
```
221221

222-
Convertir una propiedad en no configurable es hacer una calle de una vía. No podremos cambiarla de vuelta, porque `defineProperty` no funciona en propiedades no configurables.
222+
Tampoco podemos cambiar `Math.PI`a `writable` de vuelta:
223223

224-
Para ser precisos, la no configurabilidad impone varias restricciones a `defineProperty`:
225-
1. No se puede cambiar el indicador `configurable`.
226-
2. No se puede cambiar el indicador `enumerable`.
227-
3. No se puede cambiar `writable: false` a `true` (al revés funciona).
228-
4. No se puede cambiar `get/set` por una propiedad accesoria (pero puede asignarlos si está ausente).
224+
```js run
225+
// Error, porque configurable: false
226+
Object.defineProperty(Math, "PI", { writable: true });
227+
```
228+
229+
No hay nada en absoluto que podamos hacer con `Math.PI`.
229230

230-
**La idea de "configurable: false" es prevenir cambios en los indicadores de la propiedad y su eliminación mientras que permite el cambio de su valor.**
231+
Convertir una propiedad en no configurable es una calle de un solo sentido. No podremos cambiarla de vuelta con `defineProperty`.
232+
233+
**Nota que "configurable: false" impide cambios en los indicadores de la propiedad y su eliminación, pero permite el cambio de su valor.**
231234

232235
Aquí `user.name` es "non-configurable", pero aún puede cambiarse (por ser "writable"):
233236

@@ -244,7 +247,7 @@ user.name = "Pete"; // funciona
244247
delete user.name; // Error
245248
```
246249

247-
Y aquí hacemos `user.name` una constante "sellada para siempre":
250+
Y aquí hacemos `user.name` una constante "sellada para siempre", tal como la incorporada `Math.PI`:
248251

249252
```js run
250253
let user = {
@@ -263,6 +266,11 @@ delete user.name;
263266
Object.defineProperty(user, "name", { value: "Pedro" });
264267
```
265268

269+
```smart header="Único cambio de atributo posible: writable true -> false"
270+
Hay una excepción menor acerca del cambio de indicadores.
271+
272+
Podemos cambiar `writable: true` a `false` en una propiedad no configurable, impidiendo en más la modificación de su valor (sumando una capa de protección). Aunque no hay vuelta atrás.
273+
```
266274

267275
## Object.defineProperties
268276

2-ui/3-event-details/6-pointer-events/article.md

Lines changed: 73 additions & 37 deletions
Large diffs are not rendered by default.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<!DOCTYPE html>
2+
<link rel="stylesheet" href="style.css">
3+
4+
<div id="slider" class="slider">
5+
<div class="thumb"></div>
6+
</div>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
.slider {
2+
border-radius: 5px;
3+
background: #E0E0E0;
4+
background: linear-gradient(left top, #E0E0E0, #EEEEEE);
5+
width: 310px;
6+
height: 15px;
7+
margin: 5px;
8+
}
9+
10+
.thumb {
11+
width: 10px;
12+
height: 25px;
13+
border-radius: 3px;
14+
position: relative;
15+
left: 10px;
16+
top: -5px;
17+
background: blue;
18+
cursor: pointer;
19+
}

2-ui/3-event-details/6-pointer-events/slider.view/index.html

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,30 @@
55
<div class="thumb"></div>
66
</div>
77

8+
<p style="border:1px solid gray" onmousemove="this.textContent = new Date()">Mouse over here to see the date</p>
9+
810
<script>
911
let thumb = slider.querySelector('.thumb');
1012
let shiftX;
1113

12-
thumb.onpointerdown = function(event) {
14+
function onThumbDown(event) {
1315
event.preventDefault(); // prevent selection start (browser action)
1416

1517
shiftX = event.clientX - thumb.getBoundingClientRect().left;
1618

1719
thumb.setPointerCapture(event.pointerId);
20+
21+
thumb.onpointermove = onThumbMove;
22+
23+
thumb.onpointerup = event => {
24+
// dragging finished, no need to track pointer any more
25+
// ...any other "drag end" logic here...
26+
thumb.onpointermove = null;
27+
thumb.onpointerup = null;
28+
}
1829
};
1930

20-
thumb.onpointermove = function(event) {
31+
function onThumbMove(event) {
2132
let newLeft = event.clientX - shiftX - slider.getBoundingClientRect().left;
2233

2334
// if the pointer is out of slider => adjust left to be within the bounaries
@@ -32,6 +43,8 @@
3243
thumb.style.left = newLeft + 'px';
3344
};
3445

46+
thumb.onpointerdown = onThumbDown;
47+
3548
thumb.ondragstart = () => false;
3649

3750
</script>

2-ui/5-loading/01-onload-ondomcontentloaded/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
El ciclo de vida de una página HTML tiene tres eventos importantes:
44

55
- `DOMContentLoaded` -- el navegador HTML está completamente cargado y el árbol DOM está construido, pero es posible que los recursos externos como `<img>` y hojas de estilo aún no se hayan cargado.
6-
- `load` -- no solo se carga el HTML, sino también todos los recursos externos: imágenes, estilos, etc.
6+
- `load` -- no solo se cargó el HTML, sino también todos los recursos externos: imágenes, estilos, etc.
77
- `beforeunload/unload` -- el usuario sale de la pagina.
88

99
Cada evento puede ser útil:
@@ -114,7 +114,7 @@ El siguiente ejemplo muestra correctamente los tamaños de las imágenes, porque
114114

115115
```html run height=200 refresh
116116
<script>
117-
window.onload = function() { // similar a window.addEventListener('load', (event) => {
117+
window.onload = function() { // también puede usar window.addEventListener('load', (event) => {
118118
alert('Página cargada');
119119
120120
// la imagen es cargada al mismo tiempo

5-network/02-formdata/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ El servidor lee el formulario `form-data` y el archivo tal como si de un formula
168168

169169
Los objetos [FormData](https://xhr.spec.whatwg.org/#interface-formdata) son utilizados para capturar un formulario HTML y enviarlo utilizando `fetch` u otro método de red.
170170

171-
Podemos crear el objeto con `new FormData(form)` desde un formulario HTML, o crearlo sin un formulario en absoluto, y agregar los campos con los siguientes métodos:
171+
Podemos crear el objeto con `new FormData(form)` desde un formulario HTML, o crear un objeto sin un formulario en absoluto y agregar los campos con los siguientes métodos:
172172

173173
- `formData.append(nombre, valor)`
174174
- `formData.append(nombre, blob, nombreDeArchivo)`

0 commit comments

Comments
 (0)