JavaScript está basado en objetos y cualquier elemento puede considerarse como un objeto. Sin embargo, los tipos y objetos son diferentes. En este artículo, además de discutir algunas características de tipos y objetos, lo más importante es que estudiamos cómo escribir tipos buenos y reutilizables. Después de todo, si JavaScript, un lenguaje de secuencias de comandos popular, se puede encapsular bien y formar una biblioteca de tipos enorme, su reutilización será muy significativa.
Hay muchos artículos sobre prototipos en Internet, pero nunca entendí la idea central. Finalmente, después de escribir mucho código de ejemplo, me di cuenta: el prototipo solo se puede usar en tipos.
Los siguientes son algunos ejemplos sobre tipos y objetos. Después de leer los ejemplos, puede que le resulte más fácil comprender la conexión entre tipos y objetos:
Código de ejemplo | ilustrar | |
1 | Objeto.prototipo.Propiedad = 1; Object.prototype.Method = function (){ alert(1);}var obj = new Object();alert(obj.Property);obj.Method(); | Puede utilizar prototipos en tipos para agregar comportamiento al tipo. Estos comportamientos sólo pueden manifestarse en instancias del tipo. Los tipos permitidos en JS son Matriz, Booleano, Fecha, Enumerador, Error, Función, Número, Objeto, RegExp, Cadena |
2 | var obj = nuevo Objeto(); obj.prototype.Property = 1;//Error//Errorobj.prototype.Method = function(){ alert(1);} | No puede utilizar el prototipo en una instancia; de lo contrario, se producirá un error de compilación. |
3 | Objeto.Property = 1;Object.Method = function(){ alerta(1);}alerta(Object.Property);Object.Method(); | Puede definir propiedades y métodos "estáticos" para un tipo y llamarlos directamente en el tipo. |
4 | Object.Property = 1;Object.Method = function(){ alert(1);}var obj = new Object();alert(obj.Property);//Errorobj.Method();//Error | Una instancia no puede llamar a propiedades o métodos estáticos de un tipo; de lo contrario, se producirá un error de objeto indefinido. |
5 | función Aclass(){this.Property = 1;this.Method = function(){ alert(1);}}var obj = new Aclass();alert(obj.Property);obj.Method(); | Este ejemplo demuestra la forma habitual de definir un tipo en JavaScript. |
6 | función Aclass(){this.Property = 1;this.Method = function(){ alerta(1);}}Aclass.prototype.Property2 = 2;Aclass.prototype.Method2 = función{ alerta(2);}var obj = nueva Aclass();alert(obj.Property2);obj.Method2(); | Los prototipos se pueden usar externamente para agregar propiedades y métodos a tipos personalizados. |
7 | función Aclass(){this.Property = 1;this.Method = function(){ alert(1);}}Aclass.prototype.Property = 2;Aclass.prototype.Method = function{ alert(2);}var obj = nueva Aclass();alert(obj.Property);obj.Method(); | Las propiedades o métodos de un tipo personalizado no se pueden cambiar externamente a través del prototipo. Como puede ver en este ejemplo: las propiedades y métodos llamados siguen siendo los resultados de la definición inicial. |
8 | función Aclass(){this.Property = 1;this.Method = function(){ alert(1);}}var obj = new Aclass();obj.Property = 2;obj.Method = function(){ alert( 2);}alerta(obj.Property);obj.Method(); | Las propiedades se pueden cambiar en los objetos. (Esto es seguro) También puedes cambiar los métodos en el objeto. (Diferente del concepto común orientado a objetos) |
9 | función Aclass(){this.Property = 1;this.Method = function(){ alert(1);}}var obj = new Aclass();obj.Property2 = 2;obj.Method2 = function(){ alert( 2);}alerta(obj.Property2);obj.Method2(); | Puedes agregar propiedades o métodos a los objetos. |
10 | función AClass(){ esta.Property = 1; this.Method = function() { alerta(1 }}función AClass2(){ this.Property2 = 2; }}AClass2.prototype = nueva AClass();var obj = nueva AClass2();alert(obj.Property);obj.Method();alert(obj.Property2);obj.Method2(); | Este ejemplo ilustra cómo un tipo hereda de otro tipo. |
11 | función AClass(){ esta.Property = 1; this.Method = function() { alerta(1 }}función AClass2(){ this.Property2 = 2; }}AClass2.prototype = nueva AClass();AClass2.prototype.Property = 3;AClass2.prototype.Method = function(){ alert(4);}var obj = new AClass2();alert(obj.Property);obj.Method(); | Este ejemplo ilustra cómo una subclase puede anular las propiedades o métodos de una clase principal. |
・Ejemplo 2: Restricciones en el uso de prototipos
・Ejemplo 3: Cómo definir miembros estáticos en un tipo
・Ejemplo 7: restricciones de prototipo en miembros de tipos redefinidos
・Ejemplo 10: Cómo hacer que un tipo herede de otro tipo
・Ejemplo 11: Cómo redefinir miembros de la clase principal en la subclase
Las características orientadas a objetos que JavaScript puede implementar incluyen:
・Campo público
・Método público
・Campo privado
・Método privado (campo privado)
・Sobrecarga del método
·Constructor
·Evento
・Herencia única
・La subclase anula los atributos o métodos de la clase principal (anulación)
・Propiedades o métodos estáticos (miembro estático)