Toma prestado herencia constructora
Al resolver el problema de incluir valores de tipo de referencia en un prototipo, los desarrolladores comenzaron a usar una técnica llamada robo de constructor de préstamo (a veces llamados objetos forjados o herencia clásica). La idea básica de esta técnica es bastante simple, a saber, llamando al constructor supertipo dentro del constructor de subtipo.
Modo básico
function supertype () {this.colors = ["rojo", "azul", "verde"];} function subtype () {// superertype supertype.call (this);} var instance1 = nuevo subtype (); instancia1.colors.push ("negro"); alerta (instancia1.color); // "rojo, azul, verde, negro" var instance2 = new Subtype (); alerta (instancia2.colors); // "Rojo, azul, verde"Ideas básicas
La idea básica de los constructores de préstamos es usar llamadas o aplicar a copiar (pedir prestado) las propiedades y métodos especificados en la clase principal en la instancia creada por la subclase. Porque este objeto está vinculado en tiempo de ejecución en función del entorno de ejecución de la función. Es decir, a nivel mundial, esto es igual a la ventana, y cuando una función se llama como método de un objeto, esto es igual a ese objeto. Los métodos de llamada y aplicación se pueden usar para llamar a un método en lugar de otro objeto. Los métodos de llamada y aplicación pueden cambiar el contexto de objeto de una función desde el contexto inicial a un nuevo objeto especificado por ThisObj.
Por lo tanto, este constructor de préstamos es, cuando se llama al nuevo objeto (tenga en cuenta que el nuevo operador es diferente de la llamada directa. Cuando se llama a la función, esto apunta a la ventana. Cuando se crea el nuevo, esto apunta a la instancia creada), se crea un nuevo objeto de instancia y se ejecuta el código en subtipo. La llamada en el subtipo llama supertyep, lo que significa que este punto se cambia a señalar una nueva instancia, por lo que estos atributos y métodos relacionados en Supertype se asignarán a la nueva instancia, en lugar de asignar a Suptype. Todas las instancias tienen estas propiedades y métodos de esto definidos por la clase principal.
Ventajas
En comparación con las cadenas prototipo, los constructores de préstamos tienen una gran ventaja, es decir, pueden pasar parámetros a los constructores supertipo en constructores de subtipo. Debido a que el atributo está vinculado a esto, se asigna a la instancia correspondiente cuando se llama, y los valores de cada instancia no se afectarán entre sí.
Por ejemplo:
function supertype (name) {this.name = name;} function subtype () {// hereda supertype, y también pasa el parámetro supertype.call (this, "nicholas"); // atribuye this.age = 29;} var instance = new subtype (); alerta (instancia); //"Nicholas" ;alert(Instance.age); // 29Desventajas
Si solo toma prestado un constructor, no se evitarán los problemas con el patrón del constructor: todos los métodos están definidos en el constructor, por lo que no hay forma de hablar sobre la reutilización de funciones. Además, los métodos definidos en los prototipos de supertipo también son invisibles para los subtipos y, como resultado, todos los tipos solo pueden usar patrones de constructor. Dados estos problemas, la técnica de los constructores de préstamos también rara vez se usa solo.
Herencia combinada
Herencia combinada, a veces llamada herencia pseudo-clásica. Es un modelo de herencia que combina la cadena prototipo y la tecnología de constructor prestada en una sola pieza, para jugar las fortalezas de ambos.
Ideas básicas
La idea es utilizar la cadena prototipo para implementar la herencia de las propiedades y métodos prototipo, e implementar la herencia de las propiedades de instancia mediante los constructores de préstamos. De esta manera, la multiplexación de funciones se logra definiendo métodos en el prototipo, y también puede garantizar que cada instancia tenga sus propios atributos.
Modelo básico
function supertype (nombre) {this.name = name; this.colors = ["rojo", "azul", "verde"];} supertype.prototype.sayname = function () {alerta (this.name);}; function subtype (name, age) {// herencia atributo supertype.call (this, name); this.age = Age;} // Método de herencia subtype.prototype = new SuPertype (); subtype.prototype.constructor = subtype; subtype.prototype.sayage = function () {alerta (this.age);}; var instance1 = new Subtype ("nicholas",,,, 29); instancia1.colors.push ("negro"); alerta (instancia1.colors); // "rojo, azul, verde, negro" instancia1.sayname (); // "nicholas"; instancia1.sayage (); // 29VAR instance2 = new Subtype ("Greg", 27); Alert (instancia2.colors); // "rojo, azul, verde" instancia2.sayname (); // "Greg"; instancia2.sayage (); // 27Ventajas
La herencia combinada evita los defectos de las cadenas prototipo y los constructores prestados, combina sus ventajas y se convierte en el patrón de herencia más utilizado en JavaScript.
Desventajas
El mayor problema con la herencia combinada es que en cualquier caso, el constructor Supertype se llamará dos veces: una vez al crear un prototipo de subtipo y la otra vez dentro del constructor de subtipo. Si bien los subtipos eventualmente contendrán todas las propiedades de instancias del objeto Supertype, tenemos que anular estas propiedades al llamar al constructor de subtipo.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.