You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: doc/pt/object/prototype.md
+28-27Lines changed: 28 additions & 27 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,44 +1,44 @@
1
-
## Prototipo
1
+
## Protótipo
2
2
3
-
JavaScript no posee en sus características un sistema clásico de herencia, sino que
4
-
utiliza un *prototipo* para esto.
3
+
Javascript não possue em suas características um sistema clássico de herença, mas utiliza *protótipos* para isto.
5
4
6
-
Si bien a menudo se considera uno de los puntos débiles de JavaScript, el
7
-
modelo de herecia prototipado es de hecho más poderoso que el modelo clásico.
8
-
Por ejemplo, es bastante trivial construir un modelo clásico en la parte superior del mismo,
9
-
mientras esto es una tarea mucho más difícil.
5
+
Enquanto isso muitas vezes é considerada um dos pontos fracos do JavaScript, o modelo de herança prototípica é de fato mais poderoso que o modelo clássico. Por exemplo, é relativamente trivial construir um modelo clássico baseado em um modelo de protótipo, enquanto o contrário é uma tarefa muito mais difícil.
10
6
11
-
Debido al hecho que JavaScript es básicamente el único lenguaje que utiliza
12
-
apliamente la herencia prototipada, se necesita algo de tiempo para adaptarse a
13
-
las diferencias entre los dos modelos.
7
+
JavaScript é a única linguagem utilizada, que apresenta herança prototípica, por isso pode-se levar algum tempo para ajustar-se às diferenças entre os dois modelos.
14
8
15
-
La primera gran diferencia es que la herencia en JavaScript se realiza usando
16
-
llamadas de *cadenas de prototipo* (*prototype chains*).
9
+
A primeira grande diferença é que a herança em JavaScript usa *cadeias de protótipos* (*prototype chains*).
17
10
18
-
> **Nota:**Simplemente usando `Bar.prototype = Foo.prototype`dará lugar a dos objetos
19
-
> que comparten el**mismo**prototipo. Por lo tanto, los cambios que se realicen en un
20
-
> objeto afectará al otro objeto, así, en la mayoría de los casos no es el efecto
21
-
> deseado.
11
+
> **Nota:**Simplesmente usando `Bar.prototype = Foo.prototype`teremos dois objetos
12
+
> que compartilham o**mesmo**protótipo. Portanto, as mudanças que se realizem em um
13
+
> destes objetos afetará o outro objeto, sendo assim, na maioria dos casos não este não é
14
+
> o comportamento desejado pelo desenvolvedor.
22
15
16
+
// construtor Foo
23
17
function Foo() {
24
18
this.value = 42;
25
19
}
20
+
21
+
// Adiciona um método ao protótipo do construtor Foo
26
22
Foo.prototype = {
27
23
method: function() {}
28
-
};
24
+
}
29
25
26
+
// construtor Bar
30
27
function Bar() {}
31
28
32
-
// Asigna el prototipo de Bar como una nueva instancia de Foo
29
+
// Define o protótipo de Bar como uma nova instância de Foo
33
30
Bar.prototype = new Foo();
31
+
32
+
// Adiciona ao protótipo de Bar uma nova propriedade
34
33
Bar.prototype.foo = 'Hello World';
35
34
36
-
// Asegura que el constructor sea Bar
35
+
// Assegura que o construcor seja Bar
37
36
Bar.prototype.constructor = Bar;
38
37
39
-
var test = new Bar() // crea una nueva instancia de Bar
38
+
// cria uma nova instância do construtor Bar
39
+
var test = new Bar();
40
40
41
-
// Resultado de cadena de prototipos (prototype chain)
41
+
// Resultado da cadeia de protótipos (prototype chain)
42
42
test [instance of Bar]
43
43
Bar.prototype [instance of Foo]
44
44
{ foo: 'Hello World' }
@@ -47,12 +47,13 @@ llamadas de *cadenas de prototipo* (*prototype chains*).
47
47
Object.prototype
48
48
{ toString: ... /* etc. */ }
49
49
50
-
En el código anterior, el objeto `test` hereda de `Bar.prototype` y `Foo.prototype`;
51
-
por lo tanto, tendrá acceso a la función `method` que se ha definido en `Foo`.
52
-
También se tendrá acceso a a la propiedad `value` de la **única** instancia de `Foo`
53
-
que compone su prototipo. Es importante tomar en cuenta que `new Bar()`**no** creará una nueva
54
-
instancia de `Foo`, pero retornará lo asignado en su prototipo; de este modo, todas las instancias
55
-
de `Bar` tendrán que compartir el **mismo**`valor` de la propiedad.
50
+
No código anterior, o objeto `test` hedará de `Bar.prototype` e `Foo.prototype`,
51
+
por isso ele terá acesso a função `method` que foi definida em `Foo`.
52
+
53
+
Ele também terá acesso a propriedade `value` da **única** instância de `Foo`
54
+
que compõe seu protótipo. É importante notar que `new Bar()`**não** criará uma nova
55
+
instância de `Foo`, mas reutilizará os atributos associados ao seu protótipo, desta forma,
56
+
todas as instâncias de `Bar` compartilharão o **mesmo**`valor` da propriedade.
56
57
57
58
> **Nota:****No** utilice `Bar.prototype = Foo`, ya que no apunta al prototipo
58
59
> de `Foo`, sino al objeto de la función `Foo`. Así la cadena de prototipo
Copy file name to clipboardExpand all lines: site/pt/index.html
+29-28Lines changed: 29 additions & 28 deletions
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
<!DOCTYPE html><htmllang="pt"><head><title>JavaScript Garden</title><metacharset="utf-8"><metaname="description" content="Um guia sobre as peculiaridades e defeitos do JavaScript."><metaname="viewport" content="width=device-width, initial-scale=1"><linkrel="stylesheet" href="../style/garden.css" media="all"><linkrel="stylesheet" href="../style/print.css" media="print"><!--[if lt IE 9]>
2
2
<script src="javascript/html5.js"></script>
3
3
<![endif]-->
4
-
</head><body><!-- Navigation--><navid="nav_main"><div><ul><li><ahref="/JavaScript-Garden/" title="JavaScript Garden in English">en</a></li><li><ahref="/JavaScript-Garden/es" title="JavaScript Garden es Español">es</a></li><li><ahref="/JavaScript-Garden/fi" title="JavaScript-puutarha suomeksi">fi</a></li><li><ahref="/JavaScript-Garden/ja" title="JavaScript Garden in Japanese">ja</a></li><li><ahref="/JavaScript-Garden/ko" title="JavaScript Garden">ko</a></li><li><ahref="/JavaScript-Garden/pl" title="JavaScript Garden - ogród JavaScript po polsku">pl</a></li><liclass="active"><ahref="/JavaScript-Garden/pt" title="JavaScript Garden em Português">pt</a></li><li><ahref="/JavaScript-Garden/ru" title="JavaScript Гарден по-русски">ru</a></li><li><ahref="/JavaScript-Garden/tr" title="JavaScript Garden Türkçe">tr</a></li><li><ahref="/JavaScript-Garden/zh" title="JavaScript Garden 中文翻译">zh</a></li><li><ahref="/JavaScript-Garden/zhtw" title="JavaScript Garden 繁體中文翻譯">zhtw</a></li></ul><aid="top" href="#intro" title="Back to top">#top</a><aid="hide_menu" class="tablet">Hide Menu</a></div><ul><liclass="nav_intro"><h1><ahref="#intro">Introdução</a></h1><ul></ul></li><liclass="nav_object"><h1><ahref="#object">Objetos</a></h1><ul><li><ahref="#object.general">Uso de objetos e propriedades</a></li><li><ahref="#object.prototype">Prototipo</a></li><li><ahref="#object.hasownproperty"><code>hasOwnProperty</code></a></li><li><ahref="#object.forinloop">El bucle <code>for in</code></a></li></ul></li><liclass="nav_function"><h1><ahref="#function">Funções</a></h1><ul><li><ahref="#function.general">La declaración de funciones y expresiones</a></li><li><ahref="#function.this">Cómo trabaja <code>this</code></a></li><li><ahref="#function.closures">Closures y referencias</a></li><li><ahref="#function.arguments">El objeto <code>arguments</code></a></li><li><ahref="#function.constructors">Constructores</a></li><li><ahref="#function.scopes">Ámbitos y Namespaces</a></li></ul></li><liclass="nav_array"><h1><ahref="#array">Arrays</a></h1><ul><li><ahref="#array.general">Iteración de un Array y sus propiedades</a></li><li><ahref="#array.constructor">El constructor <code>Array</code></a></li></ul></li><liclass="nav_types"><h1><ahref="#types">Tipos</a></h1><ul><li><ahref="#types.equality">Equality and Comparisons</a></li><li><ahref="#types.typeof">The <code>typeof</code> Operator</a></li><li><ahref="#types.instanceof">The <code>instanceof</code> Operator</a></li><li><ahref="#types.casting">Type Casting</a></li></ul></li><liclass="nav_core"><h1><ahref="#core">Núcleo</a></h1><ul><li><ahref="#core.eval">¿Por qué no usar <code>eval</code>?</a></li><li><ahref="#core.undefined"><code>undefined</code> y <code>null</code></a></li><li><ahref="#core.semicolon">Automatic Semicolon Insertion</a></li></ul></li><liclass="nav_other"><h1><ahref="#other">Outros</a></h1><ul><li><ahref="#other.timeouts"><code>setTimeout</code> and <code>setInterval</code></a></li></ul></li></ul></nav><!-- Mobile navigation--><navid="nav_mobile"><aid="nav_prev_section" href="#">prev section<spanclass="nav_section_name">section name</span></a><aid="nav_next_section" href="#">next section<spanclass="nav_section_name">section name</span></a><aid="show_menu">show menu</a></nav><!-- Sections--><sectionid="intro"><!-- Introduction--><headerid="intro.intro"><h1>Introdução</h1><div><p><strong>Javascript Garden</strong> é uma coleção crescente de documentação sobre as partes mais peculiares da linguagem de programação JavaScript. Ele dá conselhos para evitar os erros mais comuns e sútis, bem como problemas de desempenho e más práticas, que os programadores de JavaScript não-especialistas podem encontrar em seus estudos ao se aprofundar na linguagem.</p>
4
+
</head><body><!-- Navigation--><navid="nav_main"><div><ul><li><ahref="/JavaScript-Garden/" title="JavaScript Garden in English">en</a></li><li><ahref="/JavaScript-Garden/es" title="JavaScript Garden es Español">es</a></li><li><ahref="/JavaScript-Garden/fi" title="JavaScript-puutarha suomeksi">fi</a></li><li><ahref="/JavaScript-Garden/ja" title="JavaScript Garden in Japanese">ja</a></li><li><ahref="/JavaScript-Garden/ko" title="JavaScript Garden">ko</a></li><li><ahref="/JavaScript-Garden/pl" title="JavaScript Garden - ogród JavaScript po polsku">pl</a></li><liclass="active"><ahref="/JavaScript-Garden/pt" title="JavaScript Garden em Português">pt</a></li><li><ahref="/JavaScript-Garden/ru" title="JavaScript Гарден по-русски">ru</a></li><li><ahref="/JavaScript-Garden/tr" title="JavaScript Garden Türkçe">tr</a></li><li><ahref="/JavaScript-Garden/zh" title="JavaScript Garden 中文翻译">zh</a></li><li><ahref="/JavaScript-Garden/zhtw" title="JavaScript Garden 繁體中文翻譯">zhtw</a></li></ul><aid="top" href="#intro" title="Back to top">#top</a><aid="hide_menu" class="tablet">Hide Menu</a></div><ul><liclass="nav_intro"><h1><ahref="#intro">Introdução</a></h1><ul></ul></li><liclass="nav_object"><h1><ahref="#object">Objetos</a></h1><ul><li><ahref="#object.general">Uso de objetos e propriedades</a></li><li><ahref="#object.prototype">Protótipo</a></li><li><ahref="#object.hasownproperty"><code>hasOwnProperty</code></a></li><li><ahref="#object.forinloop">El bucle <code>for in</code></a></li></ul></li><liclass="nav_function"><h1><ahref="#function">Funções</a></h1><ul><li><ahref="#function.general">La declaración de funciones y expresiones</a></li><li><ahref="#function.this">Cómo trabaja <code>this</code></a></li><li><ahref="#function.closures">Closures y referencias</a></li><li><ahref="#function.arguments">El objeto <code>arguments</code></a></li><li><ahref="#function.constructors">Constructores</a></li><li><ahref="#function.scopes">Ámbitos y Namespaces</a></li></ul></li><liclass="nav_array"><h1><ahref="#array">Arrays</a></h1><ul><li><ahref="#array.general">Iteración de un Array y sus propiedades</a></li><li><ahref="#array.constructor">El constructor <code>Array</code></a></li></ul></li><liclass="nav_types"><h1><ahref="#types">Tipos</a></h1><ul><li><ahref="#types.equality">Equality and Comparisons</a></li><li><ahref="#types.typeof">The <code>typeof</code> Operator</a></li><li><ahref="#types.instanceof">The <code>instanceof</code> Operator</a></li><li><ahref="#types.casting">Type Casting</a></li></ul></li><liclass="nav_core"><h1><ahref="#core">Núcleo</a></h1><ul><li><ahref="#core.eval">¿Por qué no usar <code>eval</code>?</a></li><li><ahref="#core.undefined"><code>undefined</code> y <code>null</code></a></li><li><ahref="#core.semicolon">Automatic Semicolon Insertion</a></li></ul></li><liclass="nav_other"><h1><ahref="#other">Outros</a></h1><ul><li><ahref="#other.timeouts"><code>setTimeout</code> and <code>setInterval</code></a></li></ul></li></ul></nav><!-- Mobile navigation--><navid="nav_mobile"><aid="nav_prev_section" href="#">prev section<spanclass="nav_section_name">section name</span></a><aid="nav_next_section" href="#">next section<spanclass="nav_section_name">section name</span></a><aid="show_menu">show menu</a></nav><!-- Sections--><sectionid="intro"><!-- Introduction--><headerid="intro.intro"><h1>Introdução</h1><div><p><strong>Javascript Garden</strong> é uma coleção crescente de documentação sobre as partes mais peculiares da linguagem de programação JavaScript. Ele dá conselhos para evitar os erros mais comuns e sútis, bem como problemas de desempenho e más práticas, que os programadores de JavaScript não-especialistas podem encontrar em seus estudos ao se aprofundar na linguagem.</p>
5
5
6
6
<p>Javascript Garden não pretende ensinar-lhe JavaScript. O pré-conhecimento da linguagem é altamente recomendável, a fim de compreender os tópicos abordados neste guia. Se você preferir, aprender as noções básicas da linguagem, por favor, dirija-se ao excelente <ahref="https://developer.mozilla.org/en/JavaScript/Guide">guia</a>
7
7
disponível no Mozilla Developer Network.</p>
@@ -119,47 +119,47 @@ <h2>Licença</h2>
119
119
<p>As propriedades dos objetos podem ser definidos com carateres simples como strings. Devido ao mal desenho do parser Javascript, o exemplo anterior lançará uma excessão <code>SyntaxError</code> para ambientes rodando versões anteriores ao
120
120
ECMAScript 5.</p>
121
121
122
-
<p>Este erro se deve ao fato de <code>delete</code> ser uma <em>palavra reservada</em> da linguagem, por tanto deve ser definido como uma string literal para garantir que ele será interpretado corretamente pelos parsers Javascript mais velhos.</p></div></article><articleid="object.prototype"><h2>Prototipo</h2><div><p>JavaScript no posee en sus características un sistema clásico de herencia, sino que
123
-
utiliza un <em>prototipo</em> para esto. </p>
122
+
<p>Este erro se deve ao fato de <code>delete</code> ser uma <em>palavra reservada</em> da linguagem, por tanto deve ser definido como uma string literal para garantir que ele será interpretado corretamente pelos parsers Javascript mais velhos.</p></div></article><articleid="object.prototype"><h2>Protótipo</h2><div><p>Javascript não possue em suas características um sistema clássico de herença, mas utiliza <em>protótipos</em> para isto.</p>
124
123
125
-
<p>Si bien a menudo se considera uno de los puntos débiles de JavaScript, el
126
-
modelo de herecia prototipado es de hecho más poderoso que el modelo clásico.
127
-
Por ejemplo, es bastante trivial construir un modelo clásico en la parte superior del mismo,
128
-
mientras esto es una tarea mucho más difícil.</p>
124
+
<p>Enquanto isso muitas vezes é considerada um dos pontos fracos do JavaScript, o modelo de herança prototípica é de fato mais poderoso que o modelo clássico. Por exemplo, é relativamente trivial construir um modelo clássico baseado em um modelo de protótipo, enquanto o contrário é uma tarefa muito mais difícil.</p>
129
125
130
-
<p>Debido al hecho que JavaScript es básicamente el único lenguaje que utiliza
131
-
apliamente la herencia prototipada, se necesita algo de tiempo para adaptarse a
132
-
las diferencias entre los dos modelos.</p>
126
+
<p>JavaScript é a única linguagem utilizada, que apresenta herança prototípica, por isso pode-se levar algum tempo para ajustar-se às diferenças entre os dois modelos.</p>
133
127
134
-
<p>La primera gran diferencia es que la herencia en JavaScript se realiza usando
135
-
llamadas de <em>cadenas de prototipo</em> (<em>prototype chains</em>).</p>
128
+
<p>A primeira grande diferença é que a herança em JavaScript usa <em>cadeias de protótipos</em> (<em>prototype chains</em>).</p>
136
129
137
130
<aside>
138
-
<p><strong>Nota:</strong>Simplemente usando <code>Bar.prototype = Foo.prototype</code>dará lugar a dos objetos
139
-
que comparten el<strong>mismo</strong>prototipo. Por lo tanto, los cambios que se realicen en un
140
-
objeto afectará al otro objeto, así, en la mayoría de los casos no es el efecto
141
-
deseado.</p>
131
+
<p><strong>Nota:</strong>Simplesmente usando <code>Bar.prototype = Foo.prototype</code>teremos dois objetos
132
+
que compartilham o<strong>mesmo</strong>protótipo. Portanto, as mudanças que se realizem em um
133
+
destes objetos afetará o outro objeto, sendo assim, na maioria dos casos não este não é
134
+
o comportamento desejado pelo desenvolvedor.</p>
142
135
</aside>
143
136
144
-
<pre><code>function Foo() {
137
+
<pre><code>// construtor Foo
138
+
function Foo() {
145
139
this.value = 42;
146
140
}
141
+
142
+
// Adiciona um método ao protótipo do construtor Foo
147
143
Foo.prototype = {
148
144
method: function() {}
149
-
};
145
+
}
150
146
147
+
// construtor Bar
151
148
function Bar() {}
152
149
153
-
// Asigna el prototipo de Bar como una nueva instancia de Foo
150
+
// Define o protótipo de Bar como uma nova instância de Foo
154
151
Bar.prototype = new Foo();
152
+
153
+
// Adiciona ao protótipo de Bar uma nova propriedade
155
154
Bar.prototype.foo = 'Hello World';
156
155
157
-
// Asegura que el constructor sea Bar
156
+
// Assegura que o construcor seja Bar
158
157
Bar.prototype.constructor = Bar;
159
158
160
-
var test = new Bar() // crea una nueva instancia de Bar
159
+
// cria uma nova instância do construtor Bar
160
+
var test = new Bar();
161
161
162
-
// Resultado de cadena de prototipos (prototype chain)
162
+
// Resultado da cadeia de protótipos (prototype chain)
163
163
test [instance of Bar]
164
164
Bar.prototype [instance of Foo]
165
165
{ foo: 'Hello World' }
@@ -169,12 +169,13 @@ <h2>Licença</h2>
169
169
{ toString: ... /* etc. */ }
170
170
</code></pre>
171
171
172
-
<p>En el código anterior, el objeto <code>test</code> hereda de <code>Bar.prototype</code> y <code>Foo.prototype</code>;
173
-
por lo tanto, tendrá acceso a la función <code>method</code> que se ha definido en <code>Foo</code>.
174
-
También se tendrá acceso a a la propiedad <code>value</code> de la <strong>única</strong> instancia de <code>Foo</code>
175
-
que compone su prototipo. Es importante tomar en cuenta que <code>new Bar()</code><strong>no</strong> creará una nueva
176
-
instancia de <code>Foo</code>, pero retornará lo asignado en su prototipo; de este modo, todas las instancias
177
-
de <code>Bar</code> tendrán que compartir el <strong>mismo</strong><code>valor</code> de la propiedad.</p>
172
+
<p>No código anterior, o objeto <code>test</code> hedará de <code>Bar.prototype</code> e <code>Foo.prototype</code>,
173
+
por isso ele terá acesso a função <code>method</code> que foi definida em <code>Foo</code>.</p>
174
+
175
+
<p>Ele também terá acesso a propriedade <code>value</code> da <strong>única</strong> instância de <code>Foo</code>
176
+
que compõe seu protótipo. É importante notar que <code>new Bar()</code><strong>não</strong> criará uma nova
177
+
instância de <code>Foo</code>, mas reutilizará os atributos associados ao seu protótipo, desta forma,
178
+
todas as instâncias de <code>Bar</code> compartilharão o <strong>mesmo</strong><code>valor</code> da propriedade.</p>
178
179
179
180
<aside>
180
181
<p><strong>Nota:</strong><strong>No</strong> utilice <code>Bar.prototype = Foo</code>, ya que no apunta al prototipo
0 commit comments