JavaScript é baseado em objetos e qualquer elemento pode ser considerado um objeto. No entanto, tipos e objetos são diferentes. Neste artigo, além de discutir algumas características de tipos e objetos, mais importante ainda, estudamos como escrever tipos bons e reutilizáveis. Afinal, se o JavaScript, uma linguagem de script popular, puder ser bem encapsulado e formar uma enorme biblioteca de tipos, será muito significativo para reutilização.
Existem muitos artigos sobre protótipos na Internet, mas nunca entendi a ideia central. Finalmente, depois de escrever muitos exemplos de código, percebi: protótipo só pode ser usado em tipos.
A seguir estão alguns exemplos sobre tipos e objetos. Depois de ler os exemplos, pode ser mais fácil entender a conexão entre tipos e objetos:
Código de exemplo | ilustrar | |
1 | Object.prototype.Property = 1; Object.prototype.Method = function (){ alert(1);}var obj = new Object();alert(obj.Property);obj.Method(); | Você pode usar proptótipos em tipos para adicionar comportamento ao tipo. Esses comportamentos só podem ser manifestados em instâncias do tipo. Os tipos permitidos em JS são Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String |
2 | var obj = novo Objeto(); obj.prototype.Property = 1;//Erro//Errorobj.prototype.Method = function(){ alert(1);} | Você não pode usar protótipo em uma instância, caso contrário ocorrerá um erro de compilação. |
3 | Object.Property = 1;Object.Method = function(){ alert(1);}alert(Object.Property);Object.Method(); | Você pode definir propriedades e métodos "estáticos" para um tipo e chamá-los diretamente no tipo. |
4 | Object.Property = 1;Object.Method = function(){ alert(1);}var obj = new Object();alert(obj.Property);//Errorobj.Method();//Erro | Uma instância não pode chamar propriedades estáticas ou métodos de um tipo, caso contrário ocorrerá um erro de objeto indefinido. |
5 | function Aclass(){this.Property = 1;this.Method = function(){ alert(1);}}var obj = new Aclass();alert(obj.Property);obj.Method(); | Este exemplo demonstra a maneira usual de definir um tipo em JavaScript |
6 | function Aclass(){this.Property = 1;this.Method = function(){ alert(1);}}Aclass.prototype.Property2 = 2;Aclass.prototype.Method2 = function{ alert(2);}var obj = new Aclass();alert(obj.Property2);obj.Method2(); | Os protótipos podem ser usados externamente para adicionar propriedades e métodos a tipos personalizados. |
7 | function Aclass(){this.Property = 1;this.Method = function(){ alert(1);}}Aclass.prototype.Property = 2;Aclass.prototype.Method = function{ alert(2);}var obj = new Aclass();alert(obj.Propriedade);obj.Method(); | As propriedades ou métodos de um tipo personalizado não podem ser alterados externamente por meio do protótipo. Como você pode ver neste exemplo: as propriedades e métodos chamados ainda são os resultados da definição inicial. |
8 | function Aclass(){this.Property = 1;this.Method = function(){ alert(1);}}var obj = new Aclass();obj.Property = 2;obj.Method = function(){ alert( 2);}alert(obj.Propriedade);obj.Method(); | As propriedades podem ser alteradas nos objetos. (Isso é certo) Você também pode alterar métodos no objeto. (Diferente do conceito comum de orientação a objetos) |
9 | function Aclass(){this.Property = 1;this.Method = function(){ alert(1);}}var obj = new Aclass();obj.Property2 = 2;obj.Method2 = function(){ alert( 2);}alert(obj.Property2);obj.Method2(); | Você pode adicionar propriedades ou métodos a objetos |
10 | função AClass(){ this.Property = 1; this.Method = function() { alert(1);}function AClass2(){ this.Property2 = 2; }}AClass2.prototype = new AClass();var obj = new AClass2();alert(obj.Propriedade);obj.Method();alert(obj.Propriedade2);obj.Method2(); | Este exemplo ilustra como um tipo herda de outro tipo. |
11 | função AClass(){ this.Property = 1; this.Method = function() { alert(1);}function AClass2(){ this.Property2 = 2; }}AClass2.prototype = new AClass();AClass2.prototype.Property = 3;AClass2.prototype.Method = function(){ alert(4);}var obj = new AClass2();alert(obj.Property);obj.Method(); | Este exemplo ilustra como uma subclasse pode substituir as propriedades ou métodos de uma classe pai. |
・Exemplo 2: Restrições ao uso de protótipos
・Exemplo 3: Como definir membros estáticos em um tipo
・Exemplo 7: restrições de protótipo em membros de tipos redefinidos
・Exemplo 10: Como fazer um tipo herdar de outro tipo
・Exemplo 11: Como redefinir membros da classe pai na subclasse
Os recursos orientados a objetos que o JavaScript pode implementar incluem:
・Campo público
・Método Público
・Campo privado
・Método privado (campo privado)
・Sobrecarga de método
·Construtor
·Evento
・Herança única
・A subclasse substitui os atributos ou métodos da classe pai (substituição)
・Propriedades ou métodos estáticos (membro estático)