El caso en el que el método se escribe en el constructor se conoce como método dentro de la función, y el caso donde el método se escribe en el atributo prototipo se conoce como el método en el prototipo.
• Métodos dentro de la función: utilizando métodos dentro de la función, podemos acceder a variables privadas dentro de la función. Si el objeto usamos el nuevo constructor para exigirnos que operemos variables privadas dentro del constructor, debemos considerar el uso de métodos dentro de la función en este momento.
• Métodos en prototipo: cuando necesitamos crear una gran cantidad de objetos a través de una función, y estos objetos tienen muchos métodos; En este momento, debemos considerar agregar estos métodos al prototipo de la función. En este caso, nuestro código consumirá una memoria relativamente pequeña.
• En aplicaciones reales, estos dos métodos a menudo se usan en combinación; Por lo tanto, primero debemos entender lo que necesitamos y luego elegir cómo usarlo.
// Afunción de constructor a (nombre) {this.name = name || 'a'; this.sayhello = function () {console.log ('Hola, mi nombre es:' + this.name); }} // constructor bfunction b (nombre) {this.name = name || 'b';} b.prototype.sayhello = function () {console.log ('hola, mi nombre es:' + this.name);}; var a1 = new a ('a1'); var a2 = new a ('a2'); a1.sayhello (); a2.sayhello (); var b1 = new b ('b1'); B ('b2'); b1.sayhello (); b2.sayhello ();Escribí dos constructores, el primero es A, que contiene un método Sayshello; El segundo es el constructor B, que escribe que el método Sayshello en la propiedad prototipo del constructor B. Escribir el método dentro del constructor aumenta el costo de inicializar un objeto a través del constructor, y escribir el método en la propiedad prototipo reduce efectivamente este costo. Puede pensar que llamar a los métodos en el objeto es mucho más rápido que llamar a los métodos en su cadena prototipo, que no es el caso. Si no tiene muchos prototipos en el objeto, su velocidad es realmente similar.
Además, algunas cosas a tener en cuenta:
• En primer lugar, si define un método en la propiedad prototipo de la función, recuerde que si cambia un método, se cambiará el método de todos los objetos generados por este constructor.
• Otro punto es el problema de la mejora variable. Podemos echar un vistazo al siguiente código:
func1 (); // se informará un error aquí porque a FUNC1 no se le ha asignado un valor cuando se ejecuta la función. Error: FUNC1 no es un functVar func1 = functer () {console.log ('func1');}; func2 (); // Esto se ejecutará correctamente porque la declaración de la función será promovida.• Con respecto al tema de la serialización del objeto. Los atributos definidos en el prototipo de una función no serán serializados. Puede ver el siguiente código:
función a (name) {this.name = name;} A.prototype.saywhat = 'Diats ...'; var a = new a ('dreamapple'); console.log (json.stringify (a));Podemos ver que la salida es {"Nombre": "Dreamapple"}
El artículo anterior discute brevemente el método y el prototipo de los constructores JS es todo el contenido que he compartido con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.