Antes de hablar sobre las cadenas prototipo, primero debemos comprender cuál es la relación entre funciones y funciones personalizadas, y cuáles son las relaciones inextricables entre constructores, prototipos e instancias. De hecho, todas las funciones son instancias de función. Existe un prototipo de propiedad prototipo en el constructor, que también es un objeto; Luego hay una propiedad de constructor en el objeto prototipo, que apunta al constructor; y hay una propiedad _proto_ en el objeto de instancia, que también señala el objeto prototipo, y esta propiedad no es una propiedad estándar y no puede usarse en la programación. Esta propiedad se usa internamente para uso del navegador.
// _Proto_ Hay un prototipo de propiedad en la función. El objeto creado por esta función se conectará a la propiedad de forma predeterminada. // La relación entre el prototipo y _proto___ es desde la perspectiva del objeto, el prototipo es desde la perspectiva del constructor.
A continuación, veamos la imagen y hablemos.
1. La relación entre constructor, prototipo e instancia
①+objeto
②+función+objeto+matriz
Después de comprenderlos, discutamos qué es una cadena prototipo. Para decirlo sin rodeos, en realidad es una cadena finita formada entre un objeto de instancia finita y un prototipo, que se utiliza para implementar atributos y herencia compartidos. A continuación, veamos el código para hablar.
var obj = nuevo objeto (); El objeto es un objeto prototipo con un objeto prototipo y un objeto prototipo obj._proto _._ proto _._ proto _._ proto__proto_ también tiene un objeto prototipo. El objeto prototipo del objeto sigue mirando hacia arriba y encontrará un ejemplo de cadena nulo // prototipo var arr = []; arr -> array.prototype -> object.prototype -> null var o = new Object (); o -> objeto.prototype -> null; función foo1 () {this.name1 = '1';} function foo2 () {this.name2 = '2';} foo2.prototype = new foo1 (); function foo3 () {this.name = '3';} foo3.prototype = new foo2 (); var foo3 = new foo3 (); console.dir (foo3);El siguiente es el problema de herencia.
2. Herencia
1) herencia prototipo
function animal (nombre) {this.name = name; } function tiger (color) {this.color = color; } // var tiger = new Tiger ('Yellow'); // Console.log (tiger.color); // console.log (tiger.name); // Undefined // tiger.prototype = new Animal ('Tiger'); // One Way Object.prototype.name = 'Big Tiger'; // la segunda forma var tiger = new tiger ('amarillo'); console.log (tiger.color); console.log (tiger.name);Vale la pena señalar que hay dos problemas principales aquí: ① No es conveniente pasar los parámetros al tipo principal; ② Los tipos de referencia en el tipo principal son compartidos por todas las instancias
2) ES5 proporciona el método Object.Create () para implementar la herencia
"Compatible // Shim Shim Función Create (obj) {if (object.create) {return Object.Create (obj); } else {function foo () {} foo.prototype = obj; devolver nuevo foo (); }}Este método es una nueva característica de ES5, que en realidad está copiando y heredando.
3) Copiar herencia
var obj = {}; obj.extend = function (obj) {for (var k en obj) {this [k] = obj [k]; }}4) Herencia del constructor de préstamo: los miembros del prototipo en el constructor prestado no se prestan prestados
function animal (name) {this.name = name;} function mouse (apodo) {animal.call (this, 'mouse'); this.nickName = Nickname;} var m = new Mouse ('jerry'); console.log (m.name); console.log (m.nickname);Problema existente: puede resolver el problema de pasar los parámetros en la herencia prototipo, pero los miembros (atributos y métodos) en el objeto prototipo en el tipo principal no se pueden heredar
5) El objeto combinado de herencia-prototipo es dinámico
Function Person (name) {this.name = name;} persona.prototype.showname = function () {console.log (this.name);} function student (name, edad) {persona.call (this, name); this.age = Age;} student.prototype = new Person (); student.prototype.contructor = student; student.prototype.showage = function () {console.log (this.age);} var stu = new Student ('zhang san', 12); stu.showname (); stu.showage ();[Prototipo de herencia + herencia del constructor de préstamo] Su característica es que una copia de los atributos por instancia, y el método se comparte
[Resumen] Para ponerlo en una oración muy difícil, la llamada cadena prototipo es una forma de comportamiento de encontrar una madre, y se puede entender que los seres humanos nacen por seres humanos y los demonios nacen por demonios. En realidad, solo hay un núcleo de la cadena prototipo: intercambio de atributos y control independiente. Cuando su instancia de objeto necesita atributos independientes, la esencia de todas las prácticas es crear atributos en la instancia de objeto. Si no piensa demasiado, puede definir directamente los atributos independientes que necesita en persona para sobrescribir las propiedades del prototipo. En resumen, al usar la herencia prototipo, debe prestar especial atención a los atributos en el prototipo, porque todas son existencias que afectan a todo el cuerpo. El método más común ahora es el modo de combinación.
1. Cadena prototipo
1) La relación entre constructor, prototipo e instancia
① El constructor tiene un prototipo de propiedad, que es un objeto (una instancia de un objeto). ② El objeto prototipo tiene un atributo de constructor, que apunta a la función de constructor a la que pertenece el objeto prototipo. ③ El objeto de instancia tiene un atributo _proto_, que también apunta al objeto prototipo del constructor. Es una propiedad no estándar y no se puede usar para la programación. Es utilizado por el navegador mismo. 2) La relación entre prototipo y _proto_
①Prototype es una propiedad del constructor
②_proto_ es el atributo del objeto de instancia
- Ambos apuntan al mismo objeto
[Resumen] i) Las funciones también son objetos, y los objetos no son necesariamente funciones;
ii) la esencia de un objeto: un conjunto desordenado de pares de valor clave; Los valores en los pares de valor clave pueden ser valores de cualquier tipo de datos
iii) El objeto es un contenedor, y el contenedor contiene (propiedades y métodos)
3) Búsqueda de atributos
① Al acceder a un miembro del objeto, primero buscará si existe en el objeto.
Si no hay objeto actual, búscalo en el objeto prototipo del constructor
Si no se encuentra el objeto prototipo, busque el prototipo del objeto prototipo
④ Sepa que el prototipo del objeto Prototipo de objeto es nulo
2. Función
- Todas las funciones son casos de función
① Objeto local: Objeto independiente del entorno de host (navegador): incluyendo objeto, matriz, fecha, regexp, función, error, número, cadena, booleano
② Objetos incorporados: incluidos Math y Global (Window, que es una variable global en JS), y no se necesita nuevo al usarlo.
③ Objeto de host, incluidos objetos personalizados, DOM, BOM
Lo anterior es la descripción completa de cómo comprender la cadena prototipo JS que se le presenta. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!