(\([0-9]{2}\) [0-9]{4,5}-?[0-9]{4}<\/td>)+<\/tr><\/table>/; // ()+ -> um ou mais, ou ()* -> zero ou mais
89 | var telefone = '| (80) 994534543 | (70) 34353-4543 | (60) 77774543 | ';
90 | //Modelo exec
91 | console.log(regExp.exec(telefone)); //
92 | //Modelo test
93 | console.log(regExp.test(telefone)); // true
94 |
95 |
96 |
97 | //Metacaracteres
98 | // . - representa qualquer caracter
99 | // \w - representa o conjunto [a-zA-Z0-9]
100 | // \W - representa o conjunto [^a-zA-Z0-9] || ^ -> negação do conjunto
101 | // \d - representa o conjunto [0-9]
102 | // \D - representa o conjunto [^0-9] || ^ -> negação do conjunto
103 | // \s - representa um espaço em branco
104 | // \S - representa um não espaço em branco
105 | // \n - representa uma quebra de linha
106 | // \t - representa um tab
107 | //Passo 9) Reconhecer numero de telefone dentro de uma tabela, utilizando as tags de Metacaracteres
108 | var regExp = /(\(\d{2}\)\s\d{4,5}-?\d{4}<\/td>)+<\/tr><\/table>/; // \d e \s -> utilizando metacaracteres
109 | var telefone = '| (80) 994534543 | (70) 34353-4543 | (60) 77774543 | ';
110 | //Modelo exec
111 | console.log(regExp.exec(telefone)); //
112 | //Modelo test
113 | console.log(regExp.test(telefone)); // true
114 |
115 |
116 |
117 | //Passo 10) Exemplo match da String API. Para pegar somente o primeiro telefone.
118 | var regExp = /\(\d{2}\)\s\d{4,5}-?\d{4}/; // Reconhecer somente o primeiro telefone. \d e \s -> metacaracteres
119 | var telefone = '| (80) 994534543 | (70) 34353-4543 | (60) 77774543 | ';
120 | console.log(telefone.match(regExp)); //[ '(80) 994534543', index: 15 .....] pegou só o primeiro.
121 |
122 |
123 |
124 | //Modificadores
125 | // i - Case-insensitive mtching
126 | // g - Global matching
127 | // m - Multiline matching
128 | //Passo 11) Exemplo de da String API. Buscar todos os telefones da tabela utilizando modificadores.
129 | var regExp = /\(\d{2}\)\s\d{4,5}-?\d{4}/g; // Reconhecer somente os telefones || g -> todos os matching || \d e \s -> metacaracteres
130 | var telefone = '| (80) 994534543 | (70) 34353-4543 | (60) 77774543 | ';
131 | console.log(telefone.match(regExp)); //[ '(80) 994534543', '(70) 34353-4543', '(60) 77774543' ]
132 |
133 | //Buscar somente os telefones sem os préfixos.
134 | var regExp = /\d{4,5}-?\d{4}/g; // Reconhecer somente os telefones || g -> todos os matching || \d e \s -> utilizando metacaracteres
135 | var telefone = '| (80) 994534543 | (70) 34353-4543 | (60) 77774543 | ';
136 | console.log(telefone.match(regExp)); // [ '994534543', '34353-4543', '77774543' ]
137 |
138 |
139 |
140 | //Passo 12) Exemplo replace da String API. Substitui todos os telefones da tabela.
141 | var regExp = /\(\d{2}\)\s\d{4,5}-?\d{4}/g; // Reconhecer somente os telefones || g -> todos os matching || \d e \s -> metacaracteres
142 | var telefone = '| (80) 994534543 | (70) 34353-4543 | (60) 77774543 | ';
143 | console.log(telefone.replace(regExp, 'Telefone'));
144 |
--------------------------------------------------------------------------------
/4_Expressoes_regulares_ES6.js:
--------------------------------------------------------------------------------
1 | //Exemplo criar expressão regular. Modelo Fábrica.
2 | var regExp = /abc/;
3 | console.log(regExp); // /abc/
4 |
5 | //Exemplo criar expressão regular. Modelo Construção(Utiliza o new).
6 | var regExp = new RegExp('def');
7 | console.log(regExp); // /def/
8 |
9 |
10 |
11 | //Passo 1) Reconhecer numero de telefone.
12 | var regExp = /9999-9999/;
13 | var telefone = '9999-9999';
14 | //Modelo exec
15 | console.log(regExp.exec(telefone)); //[ '9999-9999', index: 0, input: '9999-9999' ]
16 | //Modelo test
17 | console.log(regExp.test(telefone)); //true
18 |
19 |
20 |
21 | //Passo 2) Reconhecer numero de telefone com DDD.
22 | var regExp = /\(46\) 9999-9999/;
23 | var telefone = '(46) 9999-9999';
24 | //Modelo exec
25 | console.log(regExp.exec(telefone)); //[ '9999-9999', index: 0, input: '9999-9999' ]
26 | //Modelo test
27 | console.log(regExp.test(telefone)); //true
28 |
29 |
30 |
31 | //Passo 3) Reconhecer numero de telefone em uma String
32 | var regExp = /\(46\) 9999-9999/;
33 | var telefone = 'O telefone é (46) 9999-9999, tratar com o Jose';
34 | //Modelo exec
35 | console.log(regExp.exec(telefone)); //[ '(46) 9999-9999', index: 13, input: 'O telefone é (46) 9999-9999, tratar com o Jose' ]
36 | //Modelo test
37 | console.log(regExp.test(telefone)); //true
38 |
39 |
40 |
41 | //ER (Expressão Regular)
42 | //Passo 4) Flexibilizar a ER para reconhecer qualquer numero de telefone que esteja de acordo com o padrão pré-definido
43 | var regExp = /^\([0-9][0-9]\) [0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$/; // ^ -> inicio da ER, $ -> fim da ER
44 | var telefone = '(46) 8899-9999';
45 | //Modelo exec
46 | console.log(regExp.exec(telefone)); //[ '(46) 8899-9999', index: 0, input: '(46) 8899-9999' ]
47 | //Modelo test
48 | console.log(regExp.test(telefone)); //true
49 |
50 |
51 |
52 | //Exemplo 1) Quantificador
53 | //Passo 5) Facilitar ER anterior, com as {}.
54 | var regExp = /^\([0-9]{2}\) [0-9]{4}-[0-9]{4}$/; // ^ -> inicio da ER, $ -> fim da ER, {x} -> x indica a quantidade de numeros
55 | var telefone = '(46) 8899-9999';
56 | //Modelo exec
57 | console.log(regExp.exec(telefone)); //[ '(46) 8899-9999', index: 0, input: '(46) 8899-9999' ]
58 | //Modelo test
59 | console.log(regExp.test(telefone)); //true
60 |
61 |
62 |
63 | //Passo 6) Flexibilizar ER anterior. Caso o numero tenha 4 ou 5 digitos.
64 | var regExp = /^\([0-9]{2}\) [0-9]{4,5}-[0-9]{4}$/; // ^ -> inicio da ER, $ -> fim da ER, {x} -> x quantidade de numeros
65 | var telefone = '(46) 58899-9999';
66 | //Modelo exec
67 | console.log(regExp.exec(telefone)); //[ '(46) 58899-9999', index: 0, input: '(46) 58899-9999' ]
68 | //Modelo test
69 | console.log(regExp.test(telefone)); //true
70 |
71 |
72 |
73 | //Exemplo 2) Quantificador
74 | //Passo 7) Flexibilizar ER anterior, utilizando '?' para dizer que o '-' é opcional.
75 | var regExp = /^\([0-9]{2}\) [0-9]{4,5}-?[0-9]{4}$/; // ^ -> inicio da ER, $ -> fim da ER, {x} -> x quantidade de numeros
76 | const telefone1 = '(46) 688999999';
77 | const telefone2 = '(54) 98763-3434';
78 | //Modelo exec
79 | console.log(regExp.exec(telefone1)); //[ '(46) 688999999', index: 0, input: '(46) 688999999' ]
80 | console.log(regExp.exec(telefone2)); //[ '(54) 98763-3434', index: 0, input: '(54) 98763-3434' ]
81 | //Modelo test
82 | console.log(regExp.test(telefone1)); //true
83 | console.log(regExp.test(telefone2)); //true
84 |
85 |
86 |
87 | //Passo 8) Reconhecer numeros de telefone dentro de uma tabela.
88 | var regExp = /(\([0-9]{2}\) [0-9]{4,5}-?[0-9]{4}<\/td>)+<\/tr><\/table>/; // ()+ -> um ou mais, ou ()* -> zero ou mais
89 | var telefone = '| (80) 994534543 | (70) 34353-4543 | (60) 77774543 | ';
90 | //Modelo exec
91 | console.log(regExp.exec(telefone)); //
92 | //Modelo test
93 | console.log(regExp.test(telefone)); // true
94 |
95 |
96 |
97 | //Metacaracteres
98 | // . - representa qualquer caracter
99 | // \w - representa o conjunto [a-zA-Z0-9]
100 | // \W - representa o conjunto [^a-zA-Z0-9] || ^ -> negação do conjunto
101 | // \d - representa o conjunto [0-9]
102 | // \D - representa o conjunto [^0-9] || ^ -> negação do conjunto
103 | // \s - representa um espaço em branco
104 | // \S - representa um não espaço em branco
105 | // \n - representa uma quebra de linha
106 | // \t - representa um tab
107 | //Passo 9) Reconhecer numero de telefone dentro de uma tabela, utilizando as tags de Metacaracteres
108 | var regExp = /(\(\d{2}\)\s\d{4,5}-?\d{4}<\/td>)+<\/tr><\/table>/; // \d e \s -> utilizando metacaracteres
109 | var telefone = '| (80) 994534543 | (70) 34353-4543 | (60) 77774543 | ';
110 | //Modelo exec
111 | console.log(regExp.exec(telefone)); //
112 | //Modelo test
113 | console.log(regExp.test(telefone)); // true
114 |
115 |
116 |
117 | //Passo 10) Exemplo match da String API. Para pegar somente o primeiro telefone.
118 | var regExp = /\(\d{2}\)\s\d{4,5}-?\d{4}/; // Reconhecer somente o primeiro telefone. \d e \s -> metacaracteres
119 | var telefone = '| (80) 994534543 | (70) 34353-4543 | (60) 77774543 | ';
120 | console.log(telefone.match(regExp)); //[ '(80) 994534543', index: 15 .....] pegou só o primeiro.
121 |
122 |
123 |
124 | //Modificadores
125 | // i - Case-insensitive mtching
126 | // g - Global matching
127 | // m - Multiline matching
128 | //Passo 11) Exemplo de da String API. Buscar todos os telefones da tabela utilizando modificadores.
129 | var regExp = /\(\d{2}\)\s\d{4,5}-?\d{4}/g; // Reconhecer somente os telefones || g -> todos os matching || \d e \s -> metacaracteres
130 | var telefone = '| (80) 994534543 | (70) 34353-4543 | (60) 77774543 | ';
131 | console.log(telefone.match(regExp)); //[ '(80) 994534543', '(70) 34353-4543', '(60) 77774543' ]
132 |
133 | //Buscar somente os telefones sem os préfixos.
134 | var regExp = /\d{4,5}-?\d{4}/g; // Reconhecer somente os telefones || g -> todos os matching || \d e \s -> utilizando metacaracteres
135 | var telefone = '| (80) 994534543 | (70) 34353-4543 | (60) 77774543 | ';
136 | console.log(telefone.match(regExp)); // [ '994534543', '34353-4543', '77774543' ]
137 |
138 |
139 |
140 | //Passo 12) Exemplo replace da String API. Substitui todos os telefones da tabela.
141 | var regExp = /\(\d{2}\)\s\d{4,5}-?\d{4}/g; // Reconhecer somente os telefones || g -> todos os matching || \d e \s -> metacaracteres
142 | var telefone = '| (80) 994534543 | (70) 34353-4543 | (60) 77774543 | ';
143 | console.log(telefone.replace(regExp, 'Telefone'));
144 |
--------------------------------------------------------------------------------
/ReadMe.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ### "A linguagem JavaScript é a única que as pessoas acham que não precisam aprender antes de começar a utilizar."
4 | (Douglas Crockford)
5 |
6 | ## O que é?
7 |
8 | JavaScript é uma linguagem de programação, criada por Dan Winkler em 1987 para a plataforma HyperCard da Apple. A princípio denominada HyperTalk, que era uma linguagem orientada a eventos, que veio para simplificar, a proposta do criador era de fazer uma linguagem para iniciantes.
9 | A Netscape quando viu, ficou impressionada com a simplicidade da linguagem, e teve a idéia de embarcar ela no browser. Foi ai que o tão famoso Brendan Eich, conhecido como o criador do JavaScript entrou em cena. A Netscape então contratou-o para implementar uma linguagem para o seu browser. Tendo em vista que a Netscape buscava algo simples, o Brendan Eich se baseou nas linguagens Java, Scheme, Self, e Perl. A seguir será esplanado superficialmente quais são as origens do JavaScript.
10 |
11 | **Java:**
12 | - Sintaxe; Sintaxe familiar, exemplo do objeto Math que faz operações, porém uma coisa não tem nada a
13 | ver com a outra.
14 | - Algumas convenções; CamelCase, nome de função e variável com letra minuscúla, dentre algumas outras
15 | similaridades.
16 |
17 | **Scheme:**
18 | - Lambda; Função anônima.
19 | - Closure; Acontece quando uma função é criada dentro de outra função.
20 | - Tipagem Fraca; Torna possível fazer operações com valores de tipos diferentes, convertendo o tipo dos
21 | valores e fazendo concatenção.
22 |
23 | **Self:**
24 | - Herança baseada em protótipos; É um estilo de programação orientada a objetos na qual não existe classes, em vez disso, a reutilização de comportamento(equivalente a herança das linguagens baseadas em classes) é realizada através de um processo de decorar(expandir) objetos existentes que servem como protótipos.Basicamente objetos herdam de outros objetos.
25 | - Objetos dinâmicos; Permite que você defina seus próprios objetos. Em JavaScript pode-se adicionar métodos a objetos individuais, sem a necessidade de reusos adicionais. Isso dá enorme poder, uma vez quese pode escrever menos, com mais simplicidade e menor complexidade de código. É importante lembrar que objetos em JavaScript são como hashtables. Assim, se pode adicionar novos valores a qualquer momento.Já se o valor é uma função, então se torna um método.
26 |
27 | **Perl:**
28 | - Expressões Regulares; São padrões utilizados para selecionar cadeias de caracteres de interesse em um texto. Em JavaScript, expressões regulares são também objetos. Por exemplo elas podem ser utilizadas com os métodos exec e test do objeto RegExp, e com os métodos match, replace, search, e split do objeto String.
29 |
30 | O primeiro nome da linguagem foi Mocha, sugerido pelo fundador da Netcape Marc Andreessen, porém acabou nem indo para o mercado. A linguagem foi lançada oficialmente em Setembro de 1995 com o nome de LiveScript na versão beta do Netscape Navigator 2.0. A partir de então a Netscape estava entrando com tudo no mundo dos browsers e a Microsoft não quis perder a carona e se deu início ao internet explorer.
31 | Em dezembro, o nome da linguagem mudou para JavaScript, a partir de um acordo feito com a Sun com o objetivo de destruir a Microsoft. A Sun então registrou o JavaScript como uma marca de uso exclusivo da Netscape, impossibilitando a Microsoft de utilizar a linguagem. Ainda assim a Microsoft fez uma engenharia reversa da linguagem JavaScript e criou a linguaguem JScript.
32 | A Netscape com medo de perder o controle, buscou padronizar a linguagem em entidades respeitadas, até que em 1997 junto a ECMA(European Computer Manufacturers Association) Internacional, conseguiu padronizar a linguagem nomeando-a ECMAScript como nome oficial, JavaScript é apenas o nome fantasia.
33 |
34 |
35 | ## Características
36 |
37 | - JavaScript é uma linguagem interpretada, não é preciso instalar nada na sua máquina, nem um tipo de
38 | compilador a não ser que voce queira interpretá-la.
39 | - Utiliza de uma orientação a objetos baseada em protótipos, basicamente não usa classes para promover
40 | heranças, mas sim os próprios objetos. Simplesmente objetos herdam de objetos. *
41 | - É uma linguagem que possui tipagem fraca e dinâmica, isto quer dizer que a gente tem uma liberdade
42 | muito grande, só que isso gera um pouco de insegurança já que a gente não tem garantia dos nossos tipos,
43 | com JavaScript é possível concatenar valores de tipos diferentes.
44 | - A linguagem não apresenta suporte a programação multi-thread, mas nada impede que seus interpretadores
45 | implementem esta habilidade de fazer algum tipo de processamento em paralelo.
46 |
47 |
48 | ## Como funciona?
49 |
50 | Esta linguagem vem sendo bastante utilizada para o desenvolvimento de aplicações web, atualmente tanto no lado do cliente para promover os estilos nas páginas HTML com animações em CSS, quanto no lado do servidor
51 | para fazer a manipulação e validação dos dados utilizando NodeJS. A linguagem permite que a aplicação seja
52 | totalmente funcional e dinâmica, sendo possível também modelar e manipular até o banco de dados através da
53 | linguagem utilizando MongoDB.
54 | Hoje esta presente nos Browsers, a até nas Tvs, como nas samsungs smart. Usa o V8 que é o motor de
55 | renderização da linguagem, que funciona como uma máquina virtual que compila o código em JavaScript para
56 | o formato nativo de máquina antes de executá-lo, tendo como propósito aumentar o desempenho da aplicação.
57 |
58 |
59 | ## Por convenção aconselha-se criar as variáveis seguindo as regras:
60 |
61 | - Devem começar por uma letra, $, ou _
62 | - Após a primeira letra, podem conter números.
63 | - Começam com letra minúscula e usam camelCase
64 | - É case-sensitive
65 |
66 |
67 | **Introção ao JavaScript**
68 |
69 | 1. [Funções 1](https://github.com/fernandobd42/Introducao_JS/blob/master/1_functions.js)
70 | 1. [Funções 1 em ES6](https://github.com/fernandobd42/Introducao_JS/blob/master/1_functions_ES6.js)
71 | 2. [Funções 2](https://github.com/fernandobd42/Introducao_JS/blob/master/2_functions.js)
72 | 2. [Funções 2 em ES6](https://github.com/fernandobd42/Introducao_JS/blob/master/2_functions_ES6.js)
73 | 3. [Array](https://github.com/fernandobd42/Introducao_JS/blob/master/3_arrays.js)
74 | 3. [Array em ES6](https://github.com/fernandobd42/Introducao_JS/blob/master/3_arrays_ES6.js)
75 | 4. [Expressões Regulares](https://github.com/fernandobd42/Introducao_JS/blob/master/4_Expressoes_regulares.js)
76 | 4. [Expressões Regulares em ES6](https://github.com/fernandobd42/Introducao_JS/blob/master/4_Expressoes_regulares_ES6.js)
77 | 5. [Date](https://github.com/fernandobd42/Introducao_JS/blob/master/5_Date.js)
78 | 5. [Date em ES6](https://github.com/fernandobd42/Introducao_JS/blob/master/5_Date_ES6.js)
79 | 6. [Operadores](https://github.com/fernandobd42/Introducao_JS/blob/master/6_Operadores.js)
80 | 6. [Operadores em ES6](https://github.com/fernandobd42/Introducao_JS/blob/master/6_Operadores_ES6.js)
81 | 7. [Declarações](https://github.com/fernandobd42/Introducao_JS/blob/master/7_Statements.js)
82 | 7. [Declarações em ES6](https://github.com/fernandobd42/Introducao_JS/blob/master/7_Statements_ES6.js)
83 | 8. [Herança 1](https://github.com/fernandobd42/Introducao_JS/blob/master/8_Heranca.js)
84 | 8. [Herança 1 em ES6](https://github.com/fernandobd42/Introducao_JS/blob/master/8_Heranca_ES6.js)
85 | 9. [Herança 2](https://github.com/fernandobd42/Introducao_JS/blob/master/9_Heranca.js)
86 | 9. [Herança 2 em ES6](https://github.com/fernandobd42/Introducao_JS/blob/master/9_Heranca_ES6.js)
87 |
--------------------------------------------------------------------------------
/7_Statements_ES6.js:
--------------------------------------------------------------------------------
1 | //Statement(Declaração) - (for, if, else, continue, while, switch, break, throw, try e catch)
2 |
3 | //Exemplo 0 - Retornando um caractere por vez. FOR para ler cada caractere do texto
4 | text = 'Introdução a JavaScript'
5 | const exemplo0 = text => {
6 | for(let i = 0; i < text.length; i++ )
7 | console.log(text.charAt(i));
8 | };
9 | exemplo0(text); // Retornou um caractere da varviavel text por linha.
10 |
11 |
12 |
13 | //Exemplo 1 - Substituindo determinado valor da string FOR para ler cada caractere do texto e IF para fazer a substituição.
14 | text = 'Ola Mundo Louco'
15 | const exemplo1 = text => {
16 | const array = [];
17 | for(let i = 0; i < text.length; i++ ) {
18 | if (text.charAt(i) === 'o') {
19 | array.push(0);
20 | } else {
21 | array.push(text.charAt(i));
22 | }
23 | }
24 | return array.join(',');
25 | };
26 | console.log(exemplo1(text)); // 'O,l,a, ,M,u,n,d,0, ,L,0,u,c,0'
27 |
28 |
29 |
30 | //Exemplo 2 - Substituindo determinados valores da string. FOR para ler cada caractere do texto e IF para fazer a substituição.
31 | text = 'Ola Mundo Sinistro'
32 | const exemplo2 = text => {
33 | const array = [];
34 | for(let i = 0; i < text.length; i++ ) {
35 | if (text.charAt(i) === 'o') {
36 | array.push(0);
37 | continue;
38 | }
39 | if (text.charAt(i) === 'a') {
40 | array.push(4);
41 | continue;
42 | }
43 | if (text.charAt(i) === 'i') {
44 | array.push(1);
45 | continue;
46 | }
47 | if (text.charAt(i) === 't') {
48 | array.push(7);
49 | continue;
50 | }
51 | array.push(text.charAt(i));
52 | }
53 | return array.join('-');
54 | };
55 | console.log(exemplo2(text));// 'O-l-4- -M-u-n-d-0- -S-1-n-1-s-7-r-0'
56 |
57 |
58 |
59 | //Exemplo 3 - Substituindo determinados valores da string. FOR para ler cada caractere do texto e
60 | // SWITCH no lugar do IF para aperfeiçoar a substituição.
61 | text = 'Ola Mundo Sinistro'
62 | const exemplo3 = text => {
63 | const array = [];
64 | for(let i = 0; i < text.length; i++ ) {
65 | switch (text.charAt(i)) {
66 | case 'o':
67 | array.push(0);
68 | break;
69 | case 'a':
70 | array.push(4);
71 | break;
72 | case 'i':
73 | array.push(1);
74 | break;
75 | case 't':
76 | array.push(7);
77 | break;
78 | default:
79 | array.push(text.charAt(i));
80 | }
81 | }
82 | return array.join(',');
83 | };
84 | console.log(exemplo3(text)); // 'O,l,4, ,M,u,n,d,0, ,S,1,n,1,s,7,r,0'
85 |
86 |
87 |
88 | //Exemplo 4 - Substituindo determinados valores da string. WHILE no lugar do FOR para ler cada caractere do texto e
89 | // SWITCH no lugar do IF para aperfeiçoar a substituição.
90 | text = 'Ola Mundo Sinistro'
91 | const exemplo4 = text => {
92 | const array = [];
93 | let i = 0;
94 | while( i < text.length) {
95 | switch (text.charAt(i)) {
96 | case 'o':
97 | array.push(0);
98 | break;
99 | case 'a':
100 | array.push(4);
101 | break;
102 | case 'i':
103 | array.push(1);
104 | break;
105 | case 't':
106 | array.push(7);
107 | break;
108 | default:
109 | array.push(text.charAt(i));
110 | }
111 | i++;
112 | }
113 | return array.join('/');
114 | };
115 | console.log(exemplo4(text)); // 'O/l/4/ /M/u/n/d/0/ /S/1/n/1/s/7/r/0'
116 |
117 |
118 |
119 | //Exemplo 5 - Tratamento de erros utilizando throw para lançar a string.
120 | text = 'Ola Mundo Sinistro'
121 | const exemplo5 = text => {
122 | // 0 , Nan, "", false, null e undefined. Caso seja algum destes, o (!text) será verdadeiro
123 | if(!text) throw " Invalid text.";
124 | const array = [];
125 | let i = 0;
126 | while( i < text.length) {
127 | switch (text.charAt(i)) {
128 | case 'o':
129 | array.push(0);
130 | break;
131 | case 'a':
132 | array.push(4);
133 | break;
134 | case 'i':
135 | array.push(1);
136 | break;
137 | case 't':
138 | array.push(7);
139 | break;
140 | default:
141 | array.push(text.charAt(i));
142 | }
143 | i++;
144 | }
145 | return array.join('');
146 | };
147 | try {
148 | console.log(exemplo5());
149 | } catch(e) {
150 | console.log(`Error:${e}`); //Error: Invalid text
151 | }
152 | console.log(exemplo5(text)); // 'Ol4 Mund0 S1n1s7r0'
153 |
154 |
155 |
156 |
157 | //Exemplo 6 - Tratamento de erros utilizando throw. Utiliza (!text) lançando a Função Construtora(new) para chamar
158 | //variável VarError que passa uma função.
159 | text = 'Ola Mundo Sinistro'
160 |
161 | var VarError = function(message) {
162 | this.message = message;
163 | this.nome = "Função armazenada na viriável VarError";
164 | };
165 |
166 | const exemplo6 = text => {
167 | // 0 , Nan, "", false, null e undefined. Caso seja algum destes, o (!text) será verdadeiro
168 | if(!text) throw new VarError(" Invalid text.");
169 | const array = [];
170 | let i = 0;
171 | while( i < text.length) {
172 | switch (text.charAt(i)) {
173 | case 'o':
174 | array.push(0);
175 | break;
176 | case 'a':
177 | array.push(4);
178 | break;
179 | case 'i':
180 | array.push(1);
181 | break;
182 | case 't':
183 | array.push(7);
184 | break;
185 | default:
186 | array.push(text.charAt(i));
187 | }
188 | i++;
189 | }
190 | return array.join('+');
191 | };
192 | try {
193 | console.log(exemplo6());
194 | } catch(e) {
195 | console.log(`Error:${e.message} ${e.nome}`); // Error Invalid text. Função armazenada na viriável VarError
196 | }
197 | console.log(exemplo6(text)); // 'O+l+4+ +M+u+n+d+0+ +S+1+n+1+s+7+r+0'
198 |
199 |
200 |
201 | //Exemplo 7 - Tratamento de erros utilizando throw.
202 | //Verificando se o text é falso, e retornando mensagem. Utiliza (!text) e typeof lançando a Função Construtora(new)
203 | //para chamar variável VarError que passa uma função.
204 | text = 'Ola Mundo Sinistro'
205 |
206 | var VarError = function(message) {
207 | this.message = message;
208 | this.nome = "Função armazenada na viriável VarError";
209 | };
210 |
211 | const exemplo7 = text => {
212 | // 0 , Nan, "", false, null e undefined. Caso seja algum destes, o (!text) será verdadeiro
213 | if(!text) throw new VarError("Invalid text.");
214 | if(typeof text !== "string") throw new VarError("Invalid type.");
215 | const array = [];
216 | let i = 0;
217 | while( i < text.length) {
218 | switch (text.charAt(i)) {
219 | case 'o':
220 | array.push(0);
221 | break;
222 | case 'a':
223 | array.push(4);
224 | break;
225 | case 'i':
226 | array.push(1);
227 | break;
228 | case 't':
229 | array.push(7);
230 | break;
231 | default:
232 | array.push(text.charAt(i));
233 | }
234 | i++;
235 | }
236 | return array.join('=');
237 | };
238 | try {
239 | console.log(exemplo7());
240 | } catch(e) {
241 | console.log(`Error: ${e.message} ${e.nome}`); // Error Invalid text. Função armazenada na viriável VarError
242 | }
243 | try {
244 | console.log(exemplo7(10));
245 | } catch(e) {
246 | console.log(`Error: ${e.message} ${e.nome}`); // Error: Invalid type. Função armazenada na viriável VarError
247 | }
248 | console.log(exemplo7(text)); // 'O=l=4= =M=u=n=d=0= =S=1=n=1=s=7=r=0'
249 |
--------------------------------------------------------------------------------
/7_Statements.js:
--------------------------------------------------------------------------------
1 | //Statement(Declaração) - (for, if, else, continue, while, switch, break, throw, try e catch)
2 |
3 | //Exemplo 0 - Retornando um caractere por vez. FOR para ler cada caractere do texto
4 | text = 'Introdução a JavaScript'
5 | var exemplo0 = function(text) {
6 | for(var i = 0; i < text.length; i++ )
7 | console.log(text.charAt(i));
8 | };
9 | exemplo0(text); // Retornou um caractere da varviavel text por linha.
10 |
11 |
12 |
13 | //Exemplo 1 - Substituindo determinado valor da string FOR para ler cada caractere do texto e IF para fazer a substituição.
14 | text = 'Ola Mundo Louco'
15 | var exemplo1 = function(text) {
16 | var array = [];
17 | for(var i = 0; i < text.length; i++ ) {
18 | if (text.charAt(i) === 'o') {
19 | array.push(0);
20 | } else {
21 | array.push(text.charAt(i));
22 | }
23 | }
24 | return array.join(',');
25 | };
26 | console.log(exemplo1(text)); // 'O,l,a, ,M,u,n,d,0, ,L,0,u,c,0'
27 |
28 |
29 |
30 | //Exemplo 2 - Substituindo determinados valores da string. FOR para ler cada caractere do texto e IF para fazer a substituição.
31 | text = 'Ola Mundo Sinistro'
32 | var exemplo2 = function(text) {
33 | var array = [];
34 | for(var i = 0; i < text.length; i++ ) {
35 | if (text.charAt(i) === 'o') {
36 | array.push(0);
37 | continue;
38 | }
39 | if (text.charAt(i) === 'a') {
40 | array.push(4);
41 | continue;
42 | }
43 | if (text.charAt(i) === 'i') {
44 | array.push(1);
45 | continue;
46 | }
47 | if (text.charAt(i) === 't') {
48 | array.push(7);
49 | continue;
50 | }
51 | array.push(text.charAt(i));
52 | }
53 | return array.join('-');
54 | };
55 | console.log(exemplo2(text));// 'O-l-4- -M-u-n-d-0- -S-1-n-1-s-7-r-0'
56 |
57 |
58 |
59 | //Exemplo 3 - Substituindo determinados valores da string. FOR para ler cada caractere do texto e
60 | // SWITCH no lugar do IF para aperfeiçoar a substituição.
61 | text = 'Ola Mundo Sinistro'
62 | var exemplo3 = function(text) {
63 | var array = [];
64 | for(var i = 0; i < text.length; i++ ) {
65 | switch (text.charAt(i)) {
66 | case 'o':
67 | array.push(0);
68 | break;
69 | case 'a':
70 | array.push(4);
71 | break;
72 | case 'i':
73 | array.push(1);
74 | break;
75 | case 't':
76 | array.push(7);
77 | break;
78 | default:
79 | array.push(text.charAt(i));
80 | }
81 | }
82 | return array.join(',');
83 | };
84 | console.log(exemplo3(text)); // 'O,l,4, ,M,u,n,d,0, ,S,1,n,1,s,7,r,0'
85 |
86 |
87 |
88 | //Exemplo 4 - Substituindo determinados valores da string. WHILE no lugar do FOR para ler cada caractere do texto e
89 | // SWITCH no lugar do IF para aperfeiçoar a substituição.
90 | text = 'Ola Mundo Sinistro'
91 | var exemplo4 = function(text) {
92 | var array = [];
93 | var i = 0;
94 | while( i < text.length) {
95 | switch (text.charAt(i)) {
96 | case 'o':
97 | array.push(0);
98 | break;
99 | case 'a':
100 | array.push(4);
101 | break;
102 | case 'i':
103 | array.push(1);
104 | break;
105 | case 't':
106 | array.push(7);
107 | break;
108 | default:
109 | array.push(text.charAt(i));
110 | }
111 | i++;
112 | }
113 | return array.join('/');
114 | };
115 | console.log(exemplo4(text)); // 'O/l/4/ /M/u/n/d/0/ /S/1/n/1/s/7/r/0'
116 |
117 |
118 |
119 | //Exemplo 5 - Tratamento de erros utilizando throw para lançar a string.
120 | text = 'Ola Mundo Sinistro'
121 | var exemplo5 = function(text) {
122 | // 0 , Nan, "", false, null e undefined. Caso seja algum destes, o (!text) será verdadeiro
123 | if(!text) throw " Invalid text.";
124 | var array = [];
125 | var i = 0;
126 | while( i < text.length) {
127 | switch (text.charAt(i)) {
128 | case 'o':
129 | array.push(0);
130 | break;
131 | case 'a':
132 | array.push(4);
133 | break;
134 | case 'i':
135 | array.push(1);
136 | break;
137 | case 't':
138 | array.push(7);
139 | break;
140 | default:
141 | array.push(text.charAt(i));
142 | }
143 | i++;
144 | }
145 | return array.join('');
146 | };
147 | try {
148 | console.log(exemplo5());
149 | } catch(e) {
150 | console.log("Error:" + e); //Error: Invalid text
151 | }
152 | console.log(exemplo5(text)); // 'Ol4 Mund0 S1n1s7r0'
153 |
154 |
155 |
156 |
157 | //Exemplo 6 - Tratamento de erros utilizando throw. Utiliza (!text) lançando a Função Construtora(new) para chamar
158 | //variável VarError que passa uma função.
159 | text = 'Ola Mundo Sinistro'
160 |
161 | var VarError = function(message) {
162 | this.message = message;
163 | this.nome = "Função armazenada na viriável VarError";
164 | };
165 |
166 | var exemplo6 = function(text) {
167 | // 0 , Nan, "", false, null e undefined. Caso seja algum destes, o (!text) será verdadeiro
168 | if(!text) throw new VarError(" Invalid text.");
169 | var array = [];
170 | var i = 0;
171 | while( i < text.length) {
172 | switch (text.charAt(i)) {
173 | case 'o':
174 | array.push(0);
175 | break;
176 | case 'a':
177 | array.push(4);
178 | break;
179 | case 'i':
180 | array.push(1);
181 | break;
182 | case 't':
183 | array.push(7);
184 | break;
185 | default:
186 | array.push(text.charAt(i));
187 | }
188 | i++;
189 | }
190 | return array.join('+');
191 | };
192 | try {
193 | console.log(exemplo6());
194 | } catch(e) {
195 | console.log("Error:" + e.message + " " + e.nome); // Error Invalid text. Função armazenada na viriável VarError
196 | }
197 | console.log(exemplo6(text)); // 'O+l+4+ +M+u+n+d+0+ +S+1+n+1+s+7+r+0'
198 |
199 |
200 |
201 | //Exemplo 7 - Tratamento de erros utilizando throw.
202 | //Verificando se o text é falso, e retornando mensagem. Utiliza (!text) e typeof lançando a Função Construtora(new)
203 | //para chamar variável VarError que passa uma função.
204 | text = 'Ola Mundo Sinistro'
205 |
206 | var VarError = function(message) {
207 | this.message = message;
208 | this.nome = "Função armazenada na viriável VarError";
209 | };
210 |
211 | var exemplo7 = function(text) {
212 | // 0 , Nan, "", false, null e undefined. Caso seja algum destes, o (!text) será verdadeiro
213 | if(!text) throw new VarError("Invalid text.");
214 | if(typeof text !== "string") throw new VarError("Invalid type.");
215 | var array = [];
216 | var i = 0;
217 | while( i < text.length) {
218 | switch (text.charAt(i)) {
219 | case 'o':
220 | array.push(0);
221 | break;
222 | case 'a':
223 | array.push(4);
224 | break;
225 | case 'i':
226 | array.push(1);
227 | break;
228 | case 't':
229 | array.push(7);
230 | break;
231 | default:
232 | array.push(text.charAt(i));
233 | }
234 | i++;
235 | }
236 | return array.join('=');
237 | };
238 | try {
239 | console.log(exemplo7());
240 | } catch(e) {
241 | console.log("Error: " + e.message + " " + e.nome); // Error Invalid text. Função armazenada na viriável VarError
242 | }
243 | try {
244 | console.log(exemplo7(10));
245 | } catch(e) {
246 | console.log("Error: " + e.message + " " + e.nome); // Error: Invalid type. Função armazenada na viriável VarError
247 | }
248 | console.log(exemplo7(text)); // 'O=l=4= =M=u=n=d=0= =S=1=n=1=s=7=r=0'
249 |
--------------------------------------------------------------------------------
/3_arrays_ES6.js:
--------------------------------------------------------------------------------
1 | //Iniciando array vazio e atribuindo valores depois.
2 | var carros = []
3 |
4 | console.log(carros[0] = 'KA'), // KA
5 | console.log(carros[1] = 'Palio'), // Palio
6 | console.log(carros[2] = 'Punto'), // Punto
7 | console.log(carros) // [ 'KA', 'Palio', 'Punto' ]
8 |
9 |
10 |
11 | //Iniciando array com new e atribuindo valores depois.
12 | var carros = new Array()
13 |
14 | console.log(carros[0] = 'Fusca'), // Fusca
15 | console.log(carros[1] = 'Brasilia'), // Brasilia
16 | console.log(carros[2] = 'Chevete'), // Chevete
17 | console.log(carros) // [ 'Fusca', 'Brasilia', 'Chevete' ]
18 |
19 |
20 |
21 | //Iniciando array in line.
22 | var carros = ['Ka', 'Palio', 'Punto'];
23 | console.log(carros) // [ 'KA', 'Palio', 'Punto' ]
24 |
25 |
26 |
27 | //Iniciando array in line com new.
28 | var carros = new Array('Fusca', 'Brasilia', 'Chevete');
29 | console.log(carros) //[ 'Fusca', 'Brasilia', 'Chevete' ]
30 |
31 |
32 |
33 | //Determinando tamanho INICIAL do array. (LEMBRANDO QUE EM JS O ARRAY NAO TEM TAMANHO FIXO)
34 | var carros = new Array(10)
35 | console.log(carros) // [ , , , , , , , , , ]
36 |
37 |
38 |
39 | //Exemplo valueOf no array. Retorna o Array.
40 | var carros = ['HRV', 'Jetta', 'Hillux'];
41 | console.log(carros.valueOf()); // [ 'HRV', 'Jetta', 'Hillux' ]
42 |
43 |
44 |
45 | //Exemplo toString no array. Retorna a String.
46 | var carros = ['HRV', 'Jetta', 'Hillux'];
47 | console.log(carros.toString()); // 'HRV,Jetta,Hillux'
48 |
49 |
50 |
51 | //Exemplo length no array. Retorna a quantidade de objetos existentes no array.
52 | var carros = ['HRV', 'Jetta', 'Hillux'];
53 | console.log(carros.length) // 3
54 |
55 |
56 |
57 | //Exemplo push no array. Insere um elemento no final do array.
58 | console.log(carros.push('Gol')) // 4
59 |
60 |
61 |
62 | //Exemplo unshift no array. Insere um elemento no início do array.
63 | console.log(carros.unshift('Lamborghine')) // 5
64 |
65 |
66 |
67 | //Exemplo pop no array. Remove o último elemento do array.
68 | console.log(carros.pop()) // 'Gol'
69 |
70 |
71 |
72 | //Exemplo shit no array. Remove o primeiro elemento do array.
73 | console.log(carros.shift()) // 'Lamborghine'
74 |
75 |
76 |
77 | //Exemplo indexOf no array. Retorna o indice de um objeto do array.
78 | console.log(carros.indexOf('Jetta')) //1
79 |
80 |
81 |
82 | //Exemplo de splice no array. Remove objetos do array utilizando o índice,
83 | //sendo possível remover mais de um elemento de uma vez
84 | console.log(carros.splice(1, 2)) //[ 'Jetta', 'Hillux' ]
85 |
86 |
87 |
88 | //Exemplo de splice no array. Adiciona um ou mais elementos no array.
89 | console.log(carros.splice(1, 0, 'jetta', 'hillux'))
90 | //1 -> busca elemento com índice 1, 0 -> remove 0 objetos do array, 'jetta', 'hillux' -> elementos dicionados.
91 |
92 |
93 |
94 | //Exemplo de iniciar array vazio e adicionar um elemento por vez com dois valores em cada elemento.
95 | var carros = [];
96 |
97 | carros[0] = {marca:'ford', modelo:'ka'};
98 | carros[1] = {marca:'chevrolet', modelo:'corsa'}
99 | carros[2] = {marca: 'fiat', modelo: 'palio'}
100 |
101 |
102 |
103 | //Exemplo de iniciar array in line, adicionando três elementos de uma vez com dois valores em cara elemento.
104 | var carros = [{marca: 'ford', modelo: 'ka'}, {marca:'chevrolet', modelo:'corsa'}, {marca:'fiat', modelo:'Palio'}];
105 |
106 |
107 |
108 | //Exemplo de forEach no array. Busca todos os elementos do array. Evolução do for, mais simples.
109 | carros.forEach(car => {
110 | console.log(car);
111 | });
112 | // { marca: 'ford', modelo: 'ka' }
113 | // { marca: 'chevrolet', modelo: 'corsa' }
114 | // { marca: 'fiat', modelo: 'Palio' }
115 |
116 |
117 |
118 | //Exemplo de filter no array. Busca determinado elemento com algum(a) filtro(característica) específico.
119 | carros.filter(car => car.marca === 'ford');
120 | // [ { marca: 'ford', modelo: 'ka' } ]
121 |
122 |
123 |
124 | //Exemplo de filter no array. Atribui função à variável carrosFord.
125 | const carrosFord = carros.filter(car => car.marca === 'ford');
126 | carrosFord // [ {marca: 'ford', modelo: 'ka' } ]
127 |
128 |
129 |
130 | //Exemplo de every no array. Verifica se todos os elementos são da marca ford, funciona como um boolean.
131 | carros.every(car => car.marca === 'ford'); //false
132 |
133 |
134 |
135 | //Exemplo de some no array. Verifica se algum dos elementos é da marca ford, funciona como um boolean.
136 | const s = carros.some(car => car.marca === 'ford');
137 | s //true
138 |
139 |
140 |
141 | //Exemplo de map no array. Mapeia os elementos por características.
142 | //Mapeia a marca de todos os elementos do array
143 | carros.map(car => car.marca); // ['ford', 'chevrolet', 'fiat']
144 |
145 | //Mapeia quantos caracteres tem a marca de cada elemento do array
146 | const mapLength = carros.map(car => car.marca.length);
147 | mapLength // [4 ,9, 4]
148 |
149 |
150 |
151 | //Exemplo diferença de forEach para reduce no array.
152 | var carros = [];
153 |
154 | carros[0] = {marca:'ford', modelo:'ka', preco: 25000};
155 | carros[1] = {marca:'chevrolet', modelo:'corsa', preco: 35000}
156 | carros[2] = {marca: 'fiat', modelo: 'palio', preco: 38000}
157 |
158 | //ForEach
159 | let total = 0;
160 | carros.forEach(car => {
161 | total += car.preco;
162 | });
163 | total // 98000
164 |
165 |
166 | //Reduce
167 | carros.reduce((prev, cur) => prev + cur.preco, 0); //98000 || prev -> elemento anterior + cur -> elemento atual, 0 -> começa do elemento 0
168 |
169 |
170 |
171 | //Criando 2 arrays, um de carros e um de motos
172 | var carros = ['ka', 'corsa', 'palio']
173 | const motos = ['honda', 'yamaha'];
174 |
175 |
176 |
177 | //Exemplo de concat no array. Criando um array de veiculos, contendo os arrays carros e motos
178 | const veiculos = carros.concat(motos);
179 | veiculos // [ 'ka', 'corsa', 'palio', 'honda', 'yamaha' ]
180 | veiculos.length // 5
181 |
182 |
183 |
184 | //Exemplo de splice no array. Busca determinados elemetos pré-definidos
185 | veiculos.slice(0,2) // [ 'ka', 'corsa' ]
186 | veiculos.slice(0,4) // [ 'ka', 'corsa', 'palio', 'honda' ]
187 | veiculos.slice(3,5) // [ 'honda', 'yamaha' ]
188 |
189 |
190 |
191 | //Exemplo reverse no array. Reverte a ordem da listagem de elementos.
192 | veiculos.reverse() // [ 'yamaha', 'honda', 'palio', 'corsa', 'ka' ]
193 | veiculos // [ 'yamaha', 'honda', 'palio', 'corsa', 'ka' ]
194 | veiculos.reverse() // [ 'ka', 'corsa', 'palio', 'honda', 'yamaha' ]
195 | veiculos // [ 'ka', 'corsa', 'palio', 'honda', 'yamaha' ]
196 |
197 |
198 |
199 | //Exemplo de sort no array. Ordena por ordem alfabetica, preco, ou qualquer outra caracteristica do elemento.
200 | var carros = [];
201 |
202 | carros[0] = {marca: 'fiat', modelo: 'palio', preco: 38000}
203 | carros[1] = {marca:'ford', modelo:'ka', preco: 25000};
204 | carros[2] = {marca:'chevrolet', modelo:'corsa', preco: 35000}
205 |
206 | //Ordenar por preço, do menor para o maior.
207 | carros.sort((a, b) => a.preco - b.preco);
208 | // [ { marca: 'ford', modelo: 'ka', preco: 25000 },
209 | // { marca: 'chevrolet', modelo: 'corsa', preco: 35000 },
210 | // { marca: 'fiat', modelo: 'palio', preco: 38000 } ]
211 |
212 | //Ordenar por preço, do maior para o menor.
213 | carros.sort((a, b) => b.preco - a.preco);
214 | // [ { marca: 'fiat', modelo: 'palio', preco: 38000 },
215 | // { marca: 'chevrolet', modelo: 'corsa', preco: 35000 },
216 | // { marca: 'ford', modelo: 'ka', preco: 25000 } ]
217 |
218 |
219 |
220 | //Exemplo join no array. Junta elementos com um separados pré-determinado.
221 | var carros = ['ka', 'corsa', 'palio', 'gol'];
222 | carros.join('/') // 'ka/corsa/palio/gol' || / -> separador dos elementos na String
223 | carros.join('-') // 'ka-corsa-palio-gol' || - -> separador dos elementos na String
224 |
--------------------------------------------------------------------------------
/9_Heranca_ES6.js:
--------------------------------------------------------------------------------
1 | //Exemplo 1 - Criando objetos diretamente.
2 | const jose = {
3 | nome: 'José',
4 | idade: 22,
5 | sexo: 'masculino'
6 | };
7 |
8 | const maria = {
9 | nome: 'Maria',
10 | idade: 20,
11 | sexo: 'feminino'
12 | };
13 |
14 | console.log(jose); // { nome: 'José', idade: 22, sexo: 'masculino' }
15 | console.log(maria); // { nome: 'Maria', idade: 20, sexo: 'feminino' }
16 |
17 |
18 |
19 | //Exemplo 2 - Criando objetos com Função Fábrica. (Mais recomendada que a forma anterior).
20 | const criarPessoa = (nome, idade, sexo) => ({
21 | nome,
22 | idade,
23 | sexo
24 | });
25 |
26 | const joao = criarPessoa('João', 30, 'masculino');
27 | const lucia = criarPessoa('Lúcia', 35, 'feminino');
28 | console.log(joao); // { nome: 'João', idade: 30, sexo: 'masculino' }
29 | console.log(lucia); // { nome: 'Lúcia', idade: 35, sexo: 'feminino' }
30 |
31 |
32 |
33 | //Exemplo 3 - Criando objetos com Função Construtora, usando o operador new.
34 | var Pessoa = function(nome, idade, sexo) {
35 | this.nome = nome;
36 | this.idade = idade;
37 | this.sexo = sexo;
38 | };
39 |
40 | const roger = new Pessoa('Roger', 12, 'masculino');
41 | const julia = new Pessoa('Julia', 10, 'feminino');
42 | console.log(roger); // { nome: 'Roger', idade: 12, sexo: 'masculino' }
43 | console.log(julia); // { nome: 'Julia', idade: 10, sexo: 'feminino' }
44 |
45 |
46 |
47 | //Exemplo 4 - Criando objeto com Função Construtora, utilizando call.
48 | var Pessoa = function(nome, idade, sexo) {
49 | this.nome = nome;
50 | this.idade = idade;
51 | this.sexo = sexo;
52 | };
53 |
54 | const isabella = {};
55 | Pessoa.call(isabella, 'Isabella', 18, 'feminino');
56 | console.log(isabella); //{ nome: 'Isabella', idade: 18, sexo: 'feminino' }
57 |
58 |
59 |
60 | //Exemplo 4 - Criando objeto com Função Construtora, utilizando apply(adicionar []).
61 | var Pessoa = function(nome, idade, sexo) {
62 | this.nome = nome;
63 | this.idade = idade;
64 | this.sexo = sexo;
65 | };
66 |
67 | const fernando = {};
68 | Pessoa.apply(fernando, ['Fernando', 21, 'masculino']);
69 | console.log(fernando); // { nome: 'Fernando', idade: 21, sexo: 'masculino' }
70 |
71 |
72 |
73 | //O objeto que tem protótipo é completamente diferente da propriedade prototype. Diferença entre [[Prototype]] e prototype:
74 | //[Prototype]] -> O conceito de protótipo é abstrato, é o protótipo que pode ser um objeto ou null.
75 | //prototype -> Basicamente é uma propriedade de prototype que só as funções tem, capaz de inserir manipular e/ou
76 | //transformar os objetos, inserindo, alterando ou excluindo propriedades em todos os objetos de uma só vez.
77 | //É considerado orientação a objetos baseada em protótipo porque os objetos reusam(herdam) propriedades e métodos de
78 | //outros objetos.
79 | //Exemplo 5 - Definindo prototype e inserindo em todos os objetos. Basicamente os objetos não tem a propriedade
80 | //sexo, quem a tem é o protótipo.
81 | var Pessoa = function(nome, idade) {
82 | this.nome = nome;
83 | this.idade = idade;
84 | };
85 |
86 | Pessoa.prototype.sexo = 'masculino'; // >>atribuindo propriedade sexo a Pessoa.<<
87 |
88 | var gabriel = new Pessoa('Gabriel', 23);
89 | console.log(gabriel); // { nome: 'Gabriel', idade: 23 }
90 | console.log(gabriel.sexo); // masculino
91 |
92 | var rafael = {};
93 | rafael.__proto__ = Pessoa.prototype; // >>Atribuindo o protótipo a rafael.<<
94 | Pessoa.apply(rafael, ["Rafael", 18]);
95 | console.log(rafael); // { nome: 'Rafael', idade: 18}
96 | console.log(rafael.sexo); // masculino
97 |
98 | Pessoa.prototype.sexo = 'feminino'; // >>Alterando propriedade sexo do prototype para 'feminino'<<
99 | console.log(gabriel.sexo); // feminino
100 | console.log(rafael.sexo); // feminino
101 |
102 |
103 |
104 | //Em JavaScript quando você faz um new array, new object, new date, dentre outros. Todos eles são criados por meio de
105 | //uma Função Construtora. Caso você esteja usando Função Construtora e queira usar herança, para manipular e/ou transformar
106 | //os objetos, você pode utilizar o prototype para definir propriedades e inserir, alterar ou excluir em todos os objetos
107 | //de uma vez.
108 | //Exemplo 6 - Inserindo prototype direto na função new.
109 | var _new = f => {
110 | const obj = {};
111 | obj.__proto__ = f.prototype; // >>O protótipo do objeto recebe a Função Construtora(f.prototype);<<
112 | f.apply(obj, ['Rafael', 18]); // >>Invoco a Função Cosnstrutora, passando o seu contexto, no caso object e um array com as propriedades do objeto <<
113 | return obj;
114 | }; // >> Função generica <<
115 |
116 | var Pessoa = function(nome, idade) {
117 | this.nome = nome;
118 | this.idade = idade;
119 | }; // >> Função direta <<
120 |
121 | Pessoa.prototype.sexo = 'masculino';
122 |
123 | var gabriel = new Pessoa('Gabriel', 23);
124 | console.log(gabriel); // { nome: 'Gabriel', idade: 23 }
125 | console.log(gabriel.sexo); // masculino
126 |
127 | var rafael = _new(Pessoa, "Rafael", 18);
128 |
129 | console.log(rafael); // { nome: 'Rafael', idade: 18 }
130 | console.log(rafael.sexo); // masculino
131 |
132 |
133 |
134 | //Exemplo 7 - Inserindo prototype direto na função new, utilizando um array, de um modo dinâmico.
135 | var _new = function(f) {
136 | const obj = {};
137 | obj.__proto__ = f.prototype; // >>O protótipo do objeto recebe a Função Construtora(f.prototype);<<
138 | f.apply(obj,Array.prototype.slice.call(arguments, 1)); // >>Invoco a Função Cosnstrutora, passando o seu contexto, no caso object e um array com as propriedades do objeto <<
139 | return obj;
140 | }; // >> Função generica <<
141 |
142 | var Pessoa = function(nome, idade) {
143 | this.nome = nome;
144 | this.idade = idade;
145 | }; // >> Função direta <<
146 |
147 | Pessoa.prototype.sexo = 'masculino';
148 |
149 | var gabriel = new Pessoa('Gabriel', 23);
150 | console.log(gabriel); // { nome: 'Gabriel', idade: 23 }
151 | console.log(gabriel.sexo); // masculino
152 |
153 | var rafael = _new(Pessoa, "Rafael", 18);
154 |
155 | console.log(rafael); // { nome: 'Rafael', idade: 18 }
156 | console.log(rafael.sexo); // masculino
157 |
158 |
159 |
160 | //Exemplo 8 - Inserindo prototype direto na função new, utilizando um array, de um modo dinâmico. Exemplo 2.
161 | var _new = function(f) {
162 | const obj = {};
163 | obj.__proto__ = f.prototype; // >>O protótipo do objeto recebe a Função Construtora(f.prototype);<<
164 | f.apply(obj,Array.prototype.slice.call(arguments, 1)); // >>Invoca a Função Cosnstrutora, passando o seu contexto, no caso object e um array com as propriedades do objeto <<
165 | return obj;
166 | }; // >> Função generica <<
167 |
168 | var Pessoa = function(nome, idade) {
169 | this.nome = nome;
170 | this.idade = idade;
171 | }; // >> Função direta <<
172 |
173 | Pessoa.prototype.sexo = 'masculino';
174 |
175 | var gabriel = _new (Pessoa, 'Gabriel', 23);
176 | console.log(gabriel); // { nome: 'Gabriel', idade: 23 }
177 | console.log(gabriel.sexo); // masculino
178 |
179 | var rafael = _new(Pessoa, "Rafael", 18);
180 |
181 | console.log(rafael); // { nome: 'Rafael', idade: 18 }
182 | console.log(rafael.sexo); // masculino
183 |
184 |
185 |
186 | //Pseudo código do new
187 | var _new = function(f) {
188 | const res = {};
189 | if(f.prototype !== null) {
190 | res.__proto__ = f.prototype;
191 | }
192 |
193 | const ret = f.aplly(res, Array.prototype.slice.call(arguments, 1));
194 | if((typeof ret === 'object' || typeof ret === 'function') && ret !== null) {
195 | return ret;
196 | }
197 | return res;
198 | }
199 | //Esclarecendo, [[prototype]] é uma propriedade que existe em todos os objetos do JavaScript que pode ser um objeto ou null.
200 | //Já prototype é uma propriedade exclusiva de funções, é utilizado para manipular e/ou transformar os objetos,
201 | //você pode utilizar o prototype para definir propriedades e inserir, alterar ou excluir em todos os objetos de uma vez.
202 |
203 | //Retrospectiva: Todo mundo é objeto, porém JavaScript 'não possui classes'. Todo objeto possui um [[prototype]].
204 |
--------------------------------------------------------------------------------
/3_arrays.js:
--------------------------------------------------------------------------------
1 | //Iniciando array vazio e atribuindo valores depois.
2 | var carros = []
3 |
4 | console.log(carros[0] = 'KA'), // KA
5 | console.log(carros[1] = 'Palio'), // Palio
6 | console.log(carros[2] = 'Punto'), // Punto
7 | console.log(carros) // [ 'KA', 'Palio', 'Punto' ]
8 |
9 |
10 |
11 | //Iniciando array com new e atribuindo valores depois.
12 | var carros = new Array()
13 |
14 | console.log(carros[0] = 'Fusca'), // Fusca
15 | console.log(carros[1] = 'Brasilia'), // Brasilia
16 | console.log(carros[2] = 'Chevete'), // Chevete
17 | console.log(carros) // [ 'Fusca', 'Brasilia', 'Chevete' ]
18 |
19 |
20 |
21 | //Iniciando array in line.
22 | var carros = ['Ka', 'Palio', 'Punto'];
23 | console.log(carros) // [ 'KA', 'Palio', 'Punto' ]
24 |
25 |
26 |
27 | //Iniciando array in line com new.
28 | var carros = new Array('Fusca', 'Brasilia', 'Chevete');
29 | console.log(carros) //[ 'Fusca', 'Brasilia', 'Chevete' ]
30 |
31 |
32 |
33 | //Determinando tamanho INICIAL do array. (LEMBRANDO QUE EM JS O ARRAY NAO TEM TAMANHO FIXO)
34 | var carros = new Array(10)
35 | console.log(carros) // [ , , , , , , , , , ]
36 |
37 |
38 |
39 | //Exemplo valueOf no array. Retorna o Array.
40 | var carros = ['HRV', 'Jetta', 'Hillux'];
41 | console.log(carros.valueOf()); // [ 'HRV', 'Jetta', 'Hillux' ]
42 |
43 |
44 |
45 | //Exemplo toString no array. Retorna a String.
46 | var carros = ['HRV', 'Jetta', 'Hillux'];
47 | console.log(carros.toString()); // 'HRV,Jetta,Hillux'
48 |
49 |
50 |
51 | //Exemplo length no array. Retorna a quantidade de objetos existentes no array.
52 | var carros = ['HRV', 'Jetta', 'Hillux'];
53 | console.log(carros.length) // 3
54 |
55 |
56 |
57 | //Exemplo push no array. Insere um elemento no final do array.
58 | console.log(carros.push('Gol')) // 4
59 |
60 |
61 |
62 | //Exemplo unshift no array. Insere um elemento no início do array.
63 | console.log(carros.unshift('Lamborghine')) // 5
64 |
65 |
66 |
67 | //Exemplo pop no array. Remove o último elemento do array.
68 | console.log(carros.pop()) // 'Gol'
69 |
70 |
71 |
72 | //Exemplo shit no array. Remove o primeiro elemento do array.
73 | console.log(carros.shift()) // 'Lamborghine'
74 |
75 |
76 |
77 | //Exemplo indexOf no array. Retorna o indice de um objeto do array.
78 | console.log(carros.indexOf('Jetta')) //1
79 |
80 |
81 |
82 | //Exemplo de splice no array. Remove objetos do array utilizando o índice,
83 | //sendo possível remover mais de um elemento de uma vez
84 | console.log(carros.splice(1, 2)) //[ 'Jetta', 'Hillux' ]
85 |
86 |
87 |
88 | //Exemplo de splice no array. Adiciona um ou mais elementos no array.
89 | console.log(carros.splice(1, 0, 'jetta', 'hillux'))
90 | //1 -> busca elemento com índice 1, 0 -> remove 0 objetos do array, 'jetta', 'hillux' -> elementos dicionados.
91 |
92 |
93 |
94 | //Exemplo de iniciar array vazio e adicionar um elemento por vez com dois valores em cada elemento.
95 | var carros = [];
96 |
97 | carros[0] = {marca:'ford', modelo:'ka'};
98 | carros[1] = {marca:'chevrolet', modelo:'corsa'}
99 | carros[2] = {marca: 'fiat', modelo: 'palio'}
100 |
101 |
102 |
103 | //Exemplo de iniciar array in line, adicionando três elementos de uma vez com dois valores em cara elemento.
104 | var carros = [{marca: 'ford', modelo: 'ka'}, {marca:'chevrolet', modelo:'corsa'}, {marca:'fiat', modelo:'Palio'}];
105 |
106 |
107 |
108 | //Exemplo de forEach no array. Busca todos os elementos do array. Evolução do for, mais simples.
109 | carros.forEach(function (car) {
110 | console.log(car);
111 | });
112 | // { marca: 'ford', modelo: 'ka' }
113 | // { marca: 'chevrolet', modelo: 'corsa' }
114 | // { marca: 'fiat', modelo: 'Palio' }
115 |
116 |
117 |
118 | //Exemplo de filter no array. Busca determinado elemento com algum(a) filtro(característica) específico.
119 | carros.filter(function(car) {
120 | return car.marca === 'ford';
121 | });
122 | // [ { marca: 'ford', modelo: 'ka' } ]
123 |
124 |
125 |
126 | //Exemplo de filter no array. Atribui função à variável carrosFord.
127 | var carrosFord = carros.filter(function(car) {
128 | return car.marca === 'ford';
129 | });
130 | carrosFord // [ {marca: 'ford', modelo: 'ka' } ]
131 |
132 |
133 |
134 | //Exemplo de every no array. Verifica se todos os elementos são da marca ford, funciona como um boolean.
135 | carros.every(function(car) {
136 | return car.marca === 'ford';
137 | }); //false
138 |
139 |
140 |
141 | //Exemplo de some no array. Verifica se algum dos elementos é da marca ford, funciona como um boolean.
142 | var s = carros.some(function(car) {
143 | return car.marca === 'ford';
144 | });
145 | s //true
146 |
147 |
148 |
149 | //Exemplo de map no array. Mapeia os elementos por características.
150 | //Mapeia a marca de todos os elementos do array
151 | carros.map(function(car) {
152 | return car.marca;
153 | }); // ['ford', 'chevrolet', 'fiat']
154 |
155 | //Mapeia quantos caracteres tem a marca de cada elemento do array
156 | var mapLength = carros.map(function(car) {
157 | return car.marca.length;
158 | });
159 | mapLength // [4 ,9, 4]
160 |
161 |
162 |
163 | //Exemplo diferença de forEach para reduce no array.
164 | var carros = [];
165 |
166 | carros[0] = {marca:'ford', modelo:'ka', preco: 25000};
167 | carros[1] = {marca:'chevrolet', modelo:'corsa', preco: 35000}
168 | carros[2] = {marca: 'fiat', modelo: 'palio', preco: 38000}
169 |
170 | //ForEach
171 | var total = 0;
172 | carros.forEach(function(car) {
173 | total += car.preco;
174 | });
175 | total // 98000
176 |
177 |
178 | //Reduce
179 | carros.reduce(function(prev, cur) {
180 | return prev + cur.preco;
181 | }, 0); //98000 || prev -> elemento anterior + cur -> elemento atual, 0 -> começa do elemento 0
182 |
183 |
184 |
185 | //Criando 2 arrays, um de carros e um de motos
186 | var carros = ['ka', 'corsa', 'palio']
187 | var motos = ['honda', 'yamaha']
188 |
189 |
190 |
191 | //Exemplo de concat no array. Criando um array de veiculos, contendo os arrays carros e motos
192 | var veiculos = carros.concat(motos);
193 | veiculos // [ 'ka', 'corsa', 'palio', 'honda', 'yamaha' ]
194 | veiculos.length // 5
195 |
196 |
197 |
198 | //Exemplo de splice no array. Busca determinados elemetos pré-definidos
199 | veiculos.slice(0,2) // [ 'ka', 'corsa' ]
200 | veiculos.slice(0,4) // [ 'ka', 'corsa', 'palio', 'honda' ]
201 | veiculos.slice(3,5) // [ 'honda', 'yamaha' ]
202 |
203 |
204 |
205 | //Exemplo reverse no array. Reverte a ordem da listagem de elementos.
206 | veiculos.reverse() // [ 'yamaha', 'honda', 'palio', 'corsa', 'ka' ]
207 | veiculos // [ 'yamaha', 'honda', 'palio', 'corsa', 'ka' ]
208 | veiculos.reverse() // [ 'ka', 'corsa', 'palio', 'honda', 'yamaha' ]
209 | veiculos // [ 'ka', 'corsa', 'palio', 'honda', 'yamaha' ]
210 |
211 |
212 |
213 | //Exemplo de sort no array. Ordena por ordem alfabetica, preco, ou qualquer outra caracteristica do elemento.
214 | var carros = [];
215 |
216 | carros[0] = {marca: 'fiat', modelo: 'palio', preco: 38000}
217 | carros[1] = {marca:'ford', modelo:'ka', preco: 25000};
218 | carros[2] = {marca:'chevrolet', modelo:'corsa', preco: 35000}
219 |
220 | //Ordenar por preço, do menor para o maior.
221 | carros.sort(function(a,b) {
222 | return a.preco - b.preco;
223 | });
224 | // [ { marca: 'ford', modelo: 'ka', preco: 25000 },
225 | // { marca: 'chevrolet', modelo: 'corsa', preco: 35000 },
226 | // { marca: 'fiat', modelo: 'palio', preco: 38000 } ]
227 |
228 | //Ordenar por preço, do maior para o menor.
229 | carros.sort(function(a,b) {
230 | return b.preco - a.preco;
231 | });
232 | // [ { marca: 'fiat', modelo: 'palio', preco: 38000 },
233 | // { marca: 'chevrolet', modelo: 'corsa', preco: 35000 },
234 | // { marca: 'ford', modelo: 'ka', preco: 25000 } ]
235 |
236 |
237 |
238 | //Exemplo join no array. Junta elementos com um separados pré-determinado.
239 | var carros = ['ka', 'corsa', 'palio', 'gol'];
240 | carros.join('/') // 'ka/corsa/palio/gol' || / -> separador dos elementos na String
241 | carros.join('-') // 'ka-corsa-palio-gol' || - -> separador dos elementos na String
242 |
--------------------------------------------------------------------------------
/9_Heranca.js:
--------------------------------------------------------------------------------
1 | //Exemplo 1 - Criando objetos diretamente.
2 | var jose = {
3 | nome: 'José',
4 | idade: 22,
5 | sexo: 'masculino'
6 | };
7 |
8 | var maria = {
9 | nome: 'Maria',
10 | idade: 20,
11 | sexo: 'feminino'
12 | };
13 |
14 | console.log(jose); // { nome: 'José', idade: 22, sexo: 'masculino' }
15 | console.log(maria); // { nome: 'Maria', idade: 20, sexo: 'feminino' }
16 |
17 |
18 |
19 | //Exemplo 2 - Criando objetos com Função Fábrica. (Mais recomendada que a forma anterior).
20 | var criarPessoa = function(nome, idade, sexo) {
21 | return {
22 | nome: nome,
23 | idade: idade,
24 | sexo: sexo
25 | };
26 | };
27 |
28 | var joao = criarPessoa('João', 30, 'masculino');
29 | var lucia = criarPessoa('Lúcia', 35, 'feminino');
30 | console.log(joao); // { nome: 'João', idade: 30, sexo: 'masculino' }
31 | console.log(lucia); // { nome: 'Lúcia', idade: 35, sexo: 'feminino' }
32 |
33 |
34 |
35 | //Exemplo 3 - Criando objetos com Função Construtora, usando o operador new.
36 | var Pessoa = function(nome, idade, sexo) {
37 | this.nome = nome;
38 | this.idade = idade;
39 | this.sexo = sexo;
40 | };
41 |
42 | var roger = new Pessoa('Roger', 12, 'masculino');
43 | var julia = new Pessoa('Julia', 10, 'feminino');
44 | console.log(roger); // { nome: 'Roger', idade: 12, sexo: 'masculino' }
45 | console.log(julia); // { nome: 'Julia', idade: 10, sexo: 'feminino' }
46 |
47 |
48 |
49 | //Exemplo 4 - Criando objeto com Função Construtora, utilizando call.
50 | var Pessoa = function(nome, idade, sexo) {
51 | this.nome = nome;
52 | this.idade = idade;
53 | this.sexo = sexo;
54 | };
55 |
56 | var isabella = {};
57 | Pessoa.call(isabella, 'Isabella', 18, 'feminino');
58 | console.log(isabella); //{ nome: 'Isabella', idade: 18, sexo: 'feminino' }
59 |
60 |
61 |
62 | //Exemplo 4 - Criando objeto com Função Construtora, utilizando apply(adicionar []).
63 | var Pessoa = function(nome, idade, sexo) {
64 | this.nome = nome;
65 | this.idade = idade;
66 | this.sexo = sexo;
67 | };
68 |
69 | var fernando = {};
70 | Pessoa.apply(fernando, ['Fernando', 21, 'masculino']);
71 | console.log(fernando); // { nome: 'Fernando', idade: 21, sexo: 'masculino' }
72 |
73 |
74 |
75 | //O objeto que tem protótipo é completamente diferente da propriedade prototype. Diferença entre [[Prototype]] e prototype:
76 | //[Prototype]] -> O conceito de protótipo é abstrato, é o protótipo que pode ser um objeto ou null.
77 | //prototype -> Basicamente é uma propriedade de prototype que só as funções tem, capaz de inserir manipular e/ou
78 | //transformar os objetos, inserindo, alterando ou excluindo propriedades em todos os objetos de uma só vez.
79 | //É considerado orientação a objetos baseada em protótipo porque os objetos reusam(herdam) propriedades e métodos de
80 | //outros objetos.
81 | //Exemplo 5 - Definindo prototype e inserindo em todos os objetos. Basicamente os objetos não tem a propriedade
82 | //sexo, quem a tem é o protótipo.
83 | var Pessoa = function(nome, idade) {
84 | this.nome = nome;
85 | this.idade = idade;
86 | };
87 |
88 | Pessoa.prototype.sexo = 'masculino'; // >>atribuindo propriedade sexo a Pessoa.<<
89 |
90 | var gabriel = new Pessoa('Gabriel', 23);
91 | console.log(gabriel); // { nome: 'Gabriel', idade: 23 }
92 | console.log(gabriel.sexo); // masculino
93 |
94 | var rafael = {};
95 | rafael.__proto__ = Pessoa.prototype; // >>Atribuindo o protótipo a rafael.<<
96 | Pessoa.apply(rafael, ["Rafael", 18]);
97 | console.log(rafael); // { nome: 'Rafael', idade: 18}
98 | console.log(rafael.sexo); // masculino
99 |
100 | Pessoa.prototype.sexo = 'feminino'; // >>Alterando propriedade sexo do prototype para 'feminino'<<
101 | console.log(gabriel.sexo); // feminino
102 | console.log(rafael.sexo); // feminino
103 |
104 |
105 |
106 | //Em JavaScript quando você faz um new array, new object, new date, dentre outros. Todos eles são criados por meio de
107 | //uma Função Construtora. Caso você esteja usando Função Construtora e queira usar herança, para manipular e/ou transformar
108 | //os objetos, você pode utilizar o prototype para definir propriedades e inserir, alterar ou excluir em todos os objetos
109 | //de uma vez.
110 | //Exemplo 6 - Inserindo prototype direto na função new.
111 | var _new = function(f) {
112 | var obj = {};
113 | obj.__proto__ = f.prototype; // >>O protótipo do objeto recebe a Função Construtora(f.prototype);<<
114 | f.apply(obj, ['Rafael', 18]); // >>Invoco a Função Cosnstrutora, passando o seu contexto, no caso object e um array com as propriedades do objeto <<
115 | return obj;
116 | }; // >> Função generica <<
117 |
118 | var Pessoa = function(nome, idade) {
119 | this.nome = nome;
120 | this.idade = idade;
121 | }; // >> Função direta <<
122 |
123 | Pessoa.prototype.sexo = 'masculino';
124 |
125 | var gabriel = new Pessoa('Gabriel', 23);
126 | console.log(gabriel); // { nome: 'Gabriel', idade: 23 }
127 | console.log(gabriel.sexo); // masculino
128 |
129 | var rafael = _new(Pessoa, "Rafael", 18);
130 |
131 | console.log(rafael); // { nome: 'Rafael', idade: 18 }
132 | console.log(rafael.sexo); // masculino
133 |
134 |
135 |
136 | //Exemplo 7 - Inserindo prototype direto na função new, utilizando um array, de um modo dinâmico.
137 | var _new = function(f) {
138 | var obj = {};
139 | obj.__proto__ = f.prototype; // >>O protótipo do objeto recebe a Função Construtora(f.prototype);<<
140 | f.apply(obj,Array.prototype.slice.call(arguments, 1)); // >>Invoco a Função Cosnstrutora, passando o seu contexto, no caso object e um array com as propriedades do objeto <<
141 | return obj;
142 | }; // >> Função generica <<
143 |
144 | var Pessoa = function(nome, idade) {
145 | this.nome = nome;
146 | this.idade = idade;
147 | }; // >> Função direta <<
148 |
149 | Pessoa.prototype.sexo = 'masculino';
150 |
151 | var gabriel = new Pessoa('Gabriel', 23);
152 | console.log(gabriel); // { nome: 'Gabriel', idade: 23 }
153 | console.log(gabriel.sexo); // masculino
154 |
155 | var rafael = _new(Pessoa, "Rafael", 18);
156 |
157 | console.log(rafael); // { nome: 'Rafael', idade: 18 }
158 | console.log(rafael.sexo); // masculino
159 |
160 |
161 |
162 | //Exemplo 8 - Inserindo prototype direto na função new, utilizando um array, de um modo dinâmico. Exemplo 2.
163 | var _new = function(f) {
164 | var obj = {};
165 | obj.__proto__ = f.prototype; // >>O protótipo do objeto recebe a Função Construtora(f.prototype);<<
166 | f.apply(obj,Array.prototype.slice.call(arguments, 1)); // >>Invoca a Função Cosnstrutora, passando o seu contexto, no caso object e um array com as propriedades do objeto <<
167 | return obj;
168 | }; // >> Função generica <<
169 |
170 | var Pessoa = function(nome, idade) {
171 | this.nome = nome;
172 | this.idade = idade;
173 | }; // >> Função direta <<
174 |
175 | Pessoa.prototype.sexo = 'masculino';
176 |
177 | var gabriel = _new (Pessoa, 'Gabriel', 23);
178 | console.log(gabriel); // { nome: 'Gabriel', idade: 23 }
179 | console.log(gabriel.sexo); // masculino
180 |
181 | var rafael = _new(Pessoa, "Rafael", 18);
182 |
183 | console.log(rafael); // { nome: 'Rafael', idade: 18 }
184 | console.log(rafael.sexo); // masculino
185 |
186 |
187 |
188 | //Pseudo código do new
189 | var _new = function(f) {
190 | var res = {};
191 | if(f.prototype !== null) {
192 | res.__proto__ = f.prototype;
193 | }
194 |
195 | var ret = f.aplly(res, Array.prototype.slice.call(arguments, 1));
196 | if((typeof ret === 'object' || typeof ret === 'function') && ret !== null) {
197 | return ret;
198 | }
199 | return res;
200 | }
201 | //Esclarecendo, [[prototype]] é uma propriedade que existe em todos os objetos do JavaScript que pode ser um objeto ou null.
202 | //Já prototype é uma propriedade exclusiva de funções, é utilizado para manipular e/ou transformar os objetos,
203 | //você pode utilizar o prototype para definir propriedades e inserir, alterar ou excluir em todos os objetos de uma vez.
204 |
205 | //Retrospectiva: Todo mundo é objeto, porém JavaScript 'não possui classes'. Todo objeto possui um [[prototype]].
206 |
--------------------------------------------------------------------------------
|
|
|
|