Skip to content

Commit fef2ea7

Browse files
committed
it fixes grammar mistakes
1 parent a20f375 commit fef2ea7

File tree

3 files changed

+23
-23
lines changed

3 files changed

+23
-23
lines changed
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Sim, parece estranho de fato.
22

3-
Porém, `instanceof` não se importa com a função, mas sim com o seu `prototype`, que corresponda á cadeia de protótipos.
3+
Porém, `instanceof` não se importa com a função, mas sim com o seu `prototype`, e assim procura correspondência na cadeia de protótipos.
44

55
E aqui em `a.__proto__ == B.prototype`, `instanceof` retorna `true`.
66

7-
Então, pela lógica de `instanceof`, o `prototype` na verdade define o tipo, não a função construtora.
7+
Então, pela lógica de `instanceof`, o `prototype` na verdade define o tipo, não é a função construtora.

1-js/09-classes/06-instanceof/1-strange-instanceof/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Importância: 5
1+
Importance: 5
22

33
---
44

1-js/09-classes/06-instanceof/article.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
O operador `instanceof` permite checar se um objeto pertence a uma determinada classe. Também leva a herança em consideração.
44

5-
Essa verificação pode ser necessário em diversos casos. Por exemplo, pode ser usada para construir uma função *polimórfica*, aquela que lida com argumentos de forma diferente dependendo do seu tipo.
5+
Essa verificação pode ser necessária em diversos casos. Por exemplo, pode ser usada para construir uma função *polimórfica*, aquela que lida com argumentos de forma diferente dependendo do seu tipo.
66

77
## O operador instanceof [#ref-instanceof]
88

@@ -19,7 +19,7 @@ Por exemplo:
1919
class Rabbit {}
2020
let rabbit = new Rabbit();
2121

22-
// É um objeto da classe Rabbit?
22+
// é um objeto da classe Rabbit?
2323
*!*
2424
alert( rabbit instanceof Rabbit ); // true
2525
*/!*
@@ -29,14 +29,14 @@ Também funciona com funções construtoras:
2929

3030
```js run
3131
*!*
32-
// Ao invés de class
32+
// ao invés de class
3333
function Rabbit() {}
3434
*/!*
3535

3636
alert( new Rabbit() instanceof Rabbit ); // true
3737
```
3838

39-
... E também com classes nativas como `Array`:
39+
...E também com classes nativas como `Array`:
4040

4141
```js run
4242
let arr = [1, 2, 3];
@@ -50,13 +50,13 @@ Normalmente `instanceof` examina a cadeia de protótipos para a verificação. T
5050

5151
O algoritmo de `obj instanceof Class` funciona mais ou menos da seguinte forma:
5252

53-
1. Se houver um método estático `Symbol.hasInstance`, basta chamá-lo: `Class[Symbol.hasInstance](obj)`. Ele deve retornar `true` ou `false`, basicamente. É assim que podemos customizar o comportamento de `instanceof`.
53+
1. Se houver um método estático `Symbol.hasInstance`, basta executá-lo como: `Class[Symbol.hasInstance](obj)`. Ele deve retornar `true` ou `false`, e é tudo. É assim que podemos customizar o comportamento de `instanceof`.
5454

5555
Por exemplo:
5656

5757
```js run
5858
// configura a verificação de instanceOf para assumir que
59-
// qualquer coisa com a propriedade canEat é uma animal
59+
// qualquer coisa com a propriedade canEat é um animal
6060
class Animal {
6161
static [Symbol.hasInstance](obj) {
6262
if (obj.canEat) return true;
@@ -65,7 +65,7 @@ O algoritmo de `obj instanceof Class` funciona mais ou menos da seguinte forma:
6565

6666
let obj = { canEat: true };
6767

68-
alert(obj instanceof Animal); // true: Animal[Symbol.hasInstance](obj) is called
68+
alert(obj instanceof Animal); // true: Animal[Symbol.hasInstance](obj) é executado
6969
```
7070

7171
2. A maioria das classes não possui `Symbol.hasInstance`. Nesse caso, a lógica padrão é usada: `obj instanceOf Class` verfica se `Class.prototype` é igual a um dos protótipos na cadeia de protótipos de `obj`.
@@ -93,19 +93,19 @@ O algoritmo de `obj instanceof Class` funciona mais ou menos da seguinte forma:
9393
alert(rabbit instanceof Animal); // true
9494
*/!*
9595
96-
// rabbit.__proto__ === Animal.prototype (no match)
96+
// rabbit.__proto__ === Animal.prototype (sem correspondência)
9797
*!*
98-
// rabbit.__proto__.__proto__ === Animal.prototype (match!)
98+
// rabbit.__proto__.__proto__ === Animal.prototype (correspondência!)
9999
*/!*
100100
```
101101

102-
Aqui está a ilustração de que `rabbit instanceof Animal` compara com `Animal.prototype`
102+
Aqui está a ilustração do que `rabbit instanceof Animal` vai comparar com `Animal.prototype`
103103

104104
![](instanceof.svg)
105105

106-
A propósito, também existe um método [objA.isPrototypeOf(objB)](mdn:js/object/isPrototypeOf), que retorna `true` se `objA` está em algum lugar na cadeia de protótipos para `objB`. Então o teste de `obj instanceof Class` pode ser reescrito como `Class.prototype.isPrototypeOf(obj)`.
106+
A propósito, também existe um método [objA.isPrototypeOf(objB)](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf), que retorna `true` se `objA` está em algum lugar na cadeia de protótipos do `objB`. Então o teste de `obj instanceof Class` pode ser reescrito como `Class.prototype.isPrototypeOf(obj)`.
107107

108-
É engraçado, mas o próprio construtor `Class` não participa da verificação! Apenas a cadeia de protótipos e `Class.prototype` importa.
108+
É engraçado, mas o próprio construtor `Class` não participa na verificação! Apenas a cadeia de protótipos e `Class.prototype` importam.
109109

110110
Isso pode levar a consequências interessantes quando uma propriedade `prototype` é alterada depois que um objeto é criado.
111111

@@ -126,7 +126,7 @@ alert( rabbit instanceof Rabbit ); // false
126126

127127
## Bonus: Object.prototype.toString para o tipo
128128

129-
Já sabemos que objetos simples são convertidos para string como `[object Object]`:
129+
Já sabemos que objetos simples convertidos para string exibem o texto `[object Object]`:
130130

131131
```js run
132132
let obj = {};
@@ -139,7 +139,7 @@ Essa é a implementação deles de `toString`. Porém, há uma característica e
139139

140140
Soa estranho? De fato. Vamos desmistificar.
141141

142-
Pela [especificação](https://tc39.github.io/ecma262/#sec-object.prototype.tostring), o `toString` nativo pode ser extraído do objeto executado no contexto de qualquer outro valor. E o seu resultado depende desse valor.
142+
Pela [especificação](https://tc39.github.io/ecma262/#sec-object.prototype.tostring), o `toString` nativo pode ser extraído do objeto e executado no contexto de qualquer outro valor. E o seu resultado depende desse valor.
143143

144144
- Para um número, será `[object Number]`
145145
- Para boleano, será `[object Boolean]`
@@ -160,7 +160,7 @@ let arr = [];
160160
alert( objectToString.call(arr) ); // [object *!*Array*/!*]
161161
```
162162

163-
Aqui usamos [call](mdn:js/function/call) como descrito no capítulo [](info:call-apply-decorators) para executar a função `objectToString` no contexto `this=arr`.
163+
Aqui usamos [call](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Function/call) como descrito no capítulo [](info:call-apply-decorators) para executar a função `objectToString` no contexto `this=arr`.
164164

165165
Internamente, o algoritmo `toString` examina `this` e retorna o resultado correspondente. Mais exemplos:
166166

@@ -186,26 +186,26 @@ let user = {
186186
alert( {}.toString.call(user) ); // [object User]
187187
```
188188

189-
Para a maioria dos objetos específicos do ambiente, existe essa propriedade. Aqui estão alguns exemplos específicos do navegadore.
189+
Para a maioria dos objetos nativos aos diversos ambientes, existe essa propriedade. Aqui estão alguns exemplos específicos do navegador:
190190

191191
```js run
192-
// toStringTag para o objeto e classes específicos do ambiente:
192+
// toStringTag para o objeto e a classe nativos ao ambiente:
193193
alert( window[Symbol.toStringTag]); // Window
194194
alert( XMLHttpRequest.prototype[Symbol.toStringTag] ); // XMLHttpRequest
195195
196196
alert( {}.toString.call(window) ); // [object Window]
197197
alert( {}.toString.call(new XMLHttpRequest()) ); // [object XMLHttpRequest]
198198
```
199199

200-
Como pode ver, o resultado é exatamente `Symbol.toStringTag` (Se existir), agrupado em `[object ...]`.
200+
Como pode ver, o resultado é exatamente `Symbol.toStringTag` (Se existir), dentro de `[object ...]`.
201201

202202
No final, temos "typeof com esteróides" que não funciona apenas para dados primitivos, mas também para objetos nativos e pode até mesmo ser personalizado.
203203

204-
Podemos usar `{}.toString.call` ao invés de `{}.toString.call` para objetos nativos quando queremos obter o tipo como uma string em vez de apenas verificar.
204+
Podemos usar `{}.toString.call` ao invés de `instanceof` para objetos nativos quando queremos obter o tipo como uma string em vez de apenas verificar.
205205

206206
## Conclusão
207207

208-
Vamos listar os métodos de checagem de tipos que conhecemos
208+
Vamos listar os métodos de checagem de tipos que conhecemos:
209209

210210
| | funciona para | retorna |
211211
|---------------|-----------------|---------------|

0 commit comments

Comments
 (0)