Tomar ejemplos, explicar la llamada, aplicar y vincular métodos en JavaScript para su referencia. El contenido específico es el siguiente
<! DocType html> <html> <head> <meta charset = "utf-8"> <title> </title> <script type = "text/javaScript"> function man (name, sex, edad) {this.name = name; this.sex = sexo; this.age = edad; this.say = function (School, Zhuanye) {console.log (this.name + "," + this.sex + ", este año" + this.age + "año! Aprenda en" + School + " + Zhuanye);}} Function Woman (nombre, sexo, edad) {this.name = name; this.sex = this.E.Age;} Var Man (" "" Man ("" "" " San "," masculino ", 26); var mujer = mujer nueva (" xiaohong "," mujer ", 18); man.say ('tsinghua University', 'Excavator'); man.say.call (mujer," Lanxiang Technical School "," Electric Welding "); Man.say.Apply (mujer, [" New Oriental "," Mars ")); Man. Club "," Pop Music "); </script> </head> <body> </body> </html>¿Por qué? ¿Qué llaman, aplicar, vincular? ¿Por qué aprender esto?
Generalmente se usa para especificar este entorno, y estos problemas generalmente ocurren antes del aprendizaje.
var a = {user: "Dream Chasing", fn: function () {console.log (this.user); }} var b = a.fn; b (); //indefinido¿Qué le pasa al usuario en el objeto A pero indefinido? Está bien si ejecutamos directamente a.fn ().
var a = {user: "Chasing Dreams", fn: function () {console.log (this.user); }} a.fn (); // persiguiendo sueñosLa razón por la cual esto se puede imprimir aquí es porque esto aquí apunta a la función A, entonces, ¿por qué no apunta a A? Si necesitamos entender este problema de señalización, consulte la comprensión profunda de este punto en JS, y no hay necesidad de memorizar este artículo.
Aunque este método puede lograr nuestro propósito, a veces tenemos que guardar este objeto a otra variable, para que podamos usar el siguiente método.
1. Llame ()
var a = {user: "Catching Dreams", fn: function () {console.log (this.user); // Catching Dreams}} var b = a.fn; b.call (a);Al agregar el primer parámetro a qué entorno agregar B, simplemente coloque este punto a ese objeto.
Además del primer parámetro, el método de llamada también puede agregar múltiples parámetros, de la siguiente manera:
var a = {usuario: "Catching Dreams", fn: function (e, ee) {console.log (this.user); // Catching Dreams Console.log (e+ee); // 3}} var b = a.fn; b.call (a, 1,2);2. Aplicar ()
El método de aplicación es algo similar al método de llamada, también puede cambiar la señalización de esto
var a = {user: "Catching Dreams", fn: function () {console.log (this.user); // Catching Dreams}} var b = a.fn; b.apply (a);Del mismo modo, Aplicar también puede tener múltiples parámetros, pero la diferencia es que el segundo parámetro debe ser una matriz, como sigue:
var a = {usuario: "Catching Dreams", fn: function (e, ee) {console.log (this.user); // Catching Dreams Console.log (e+ee); // 11}} var b = a.fn; b.apply (a, [10,1]);o
var a = {usuario: "Catching Dreams", fn: function (e, ee) {console.log (this.user); // Catching Dreams Console.log (e+ee); // 520}} var b = a.fn; var arr = [500,20]; B.Apply (a, arr); // Tenga en cuenta que si el primer parámetro de llamada y aplicación se escribe como nulo, entonces esto apunta a un objeto de ventana var a = {user: "Dream Chasing", fn: function () {console.log (this); // Window {externo: objeto, Chrome: objeto, documento: documento, a: objeto, SpeechSythesis: SpeechSynthesis ...}}} var b = a.fn; b.apply (null);3. Bind ()
El método de enlace es algo diferente de los métodos de llamada y aplicación, pero se pueden usar para cambiar la dirección de esto.
Hablemos primero sobre sus diferencias.
var a = {user: "Dream Chasing", fn: function () {console.log (this.user); }} var b = a.fn; b.bind (a);Descubrimos que el código no estaba impreso. Sí, esta es la diferencia entre los métodos de enlace y llamada y aplica. De hecho, el método de enlace devuelve una función modificada.
var a = {user: "Dream Chasing", fn: function () {console.log (this.user); }} var b = a.fn; var c = b.bind (a); console.log (c); // function () {[código nativo]}Así que ejecutemos la función C para ver si podemos imprimir al usuario en el objeto a
var a = {user: "Catching Dreams", fn: function () {console.log (this.user); // Catching Dreams}} var b = a.fn; var c = b.bind (a); c ();OK, BIND también puede tener múltiples parámetros, y los parámetros se pueden agregar nuevamente al ejecutar, pero debe tenerse en cuenta que los parámetros se llevan a cabo en el orden de los parámetros formales.
var a = {usuario: "Catching Dreams", fn: function (e, d, f) {console.log (this.user); // Catching Dreams Console.log (E, D, F); // 10 1 2}} var b = a.fn; var c = b.bind (a, 10); c (1,2);Resumen: Llame y aplique tanto Cambie esto en el contexto y ejecute esta función de inmediato. El método de enlace permite que la función correspondiente se llame cuando lo desee, y agregue parámetros cuando se ejecute. Esta es su diferencia y elige usarla de acuerdo con su situación real.
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.