En JavaScript, este punto cambia dinámicamente, y es muy probable que este punto se destruya accidentalmente durante el proceso de redacción de un programa. Por lo tanto, necesitamos una tecnología que pueda corregir el significado de esto, por lo que tenemos tres métodos: llamar, aplicar y unir para cambiar el puntaje de este cuerpo dentro de la función, porque la función tiene los conceptos de "contexto de definición", "contexto de tiempo de ejecución" y "contexto se puede cambiar"
Aplicar, llamar
Aplicar: aplique un método de cierto objeto y reemplace el objeto actual con otro objeto
Llame: llame a un método de un objeto para reemplazar el objeto actual con otro objeto
function persona () {} persona.prototype = {attr: {edad: 18, sexo: 'girl'}, say: function () {console.log ("Mi edad es" + this.attr.age); console.log ("Soy un" + this.attr.sex); }} var casar = new Person (); Marry.say (); // mi edad es 18 // Soy una niñaCambiar la dirección
function persona () {} persona.prototype = {attr: {edad: 18, sexo: 'girl'}, say: function () {console.log ("Mi edad es" + this.attr.age); console.log ("Soy un" + this.attr.sex); }} xiaoming = {attr: {edad: 20, sexo: 'boy'}}; var casar = new Person (); Marry.say (); Casarse.Lo que es común
Ambos se pueden usar para llamar a un método en lugar de otro objeto, cambiando el contexto del objeto de una función desde el contexto inicial al nuevo objeto especificado por ThisObj.
La diferencia
1. Aplicar: solo puede haber dos parámetros como máximo: el nuevo este objeto y una matriz argarraray. Si pasa múltiples parámetros a este método, escriba todos los parámetros en esta matriz. Por supuesto, incluso si solo hay un parámetro, debe escribirse en la matriz. Si Argarray no es una matriz válida o no es un objeto de argumentos, se generará un TipoError. Si no se proporcionan argumentos, el objeto global se utilizará como este OBJ y no se puede aprobar ningún argumento.
Fun.call (thatesArg [, arg1 [, arg2 [, ...]]) función f (x, y) {console.log (x+y);} f.call (nulo, 1, 1) // return 22. Llame: es una lista de parámetros directos, que se usa principalmente cuando se llaman varios métodos del objeto JS entre sí, de modo que el puntero actual permanece consistente, o en casos especiales, este puntero debe cambiarse. Si no se proporciona el parámetro de este OBJ, el objeto global se usa como ThisObj.
Fun.Apply (thatErg, [argsArray]) función f (x, y) {console.log (x+y);} f.call (null, [1,1]) // return 2Aplicar es lo mismo que la función de llamada, excepto que la lista de parámetros entrantes es diferente en el formulario. ThiseRG es el contexto que desea especificar. Puede ser cualquier objeto JavaScript (todo en JavaScript es un objeto). La llamada debe pasar los parámetros en orden, mientras que Aplicar coloca los parámetros en una matriz.
Si el número de parámetros de una función no se fija, use la llamada cuando sus parámetros conozcan claramente la cantidad y use aplique cuando sea incierto, y luego presione el parámetro en la matriz y pase. Cuando el número de parámetros es incierto, la función también puede atravesar todos los parámetros a través de la matriz de argumentos. Echemos un vistazo al uso
Código 1
var array1 = [12, "foo", {nombre: "Joe"}, -2458]; var array2 = ["doe", 555, 100]; array.prototype.push.apply (array1, array2); console.log (array1); // [12, "foo", objeto, objeto, objeto, objeto, objeto, objeto, objeto, "doe", 555, 100, 100, 1005, 100], 1005, 100], 1005, 100]Código dos
VAR NÚMEROS = [5, 458, 120, -215]; Math.max.apply (nulo, números); // 458
Código tres
log (12, "foo", {nombre: "Joe"}, -2458); function log () {var args = array.prototype.slice.call (argumentos); args.unshift ('(app)'); console.log.apply (console, args);}; // (app) 12 foo objeto {nombre: "Joe"} -2458unir
Fun.Bind (ThatesArg [, arg1 [, arg2 [, ...]]]])
A diferencia de lo anterior, Bind devolverá una nueva función que cambia este punto. Tenga en cuenta que la nueva función se enfatiza aquí, que no es la misma dirección de memoria que la utilizada antes, por lo que cuando necesita reutilizar esta función, debe guardarla en una variable para facilitar la siguiente llamada. Las dos funciones anteriores son los resultados de ejecución devueltos, es decir, la llamada se ejecuta.
La fila, además, otra cosa a tener en cuenta es que el primer parámetro en la función de enlace se convertirá automáticamente en el valor predeterminado para devolver los parámetros en la nueva función. Luego, cuando se llama a la llamada oficial, solo necesita dar los parámetros restantes, excepto el primer parámetro.
función f (x, y) {console.log (x+y);} f.call (null, [1,1]) var new_f = f.bind (null, 1,1) // Devuelve nuevo functionNew_f (1) // return 2Cabe señalar que el parámetro thantos en todos los códigos de ejemplo anteriores se reemplaza por NULL. Cuando no se especifica el objeto ThisArg, este punto es un objeto global en NULL e indefinido, es decir, el entorno de ejecución del código JS
Aplicar, llamar a la comparación de enlaces
var obj = {bar: 'oops, esta es una mala idea'}; var foo = {get: functer () {return this.bar; }} var bind = foo.get.bind (obj), call = foo.get.call (obj), aplicar = foo.get.apply (obj); console.log (bind (), llamar, aplicar); console.log (bind, llamar, aplicar); console.log (typeof bind, typeOf llamado, typeOf Aplicar); console.log (typeof bind (), typeof llamado, typeof aplicar);No veo diferencia. La diferencia es que cuando desea cambiar el contexto, no se ejecuta de inmediato, pero la devolución de llamada se ejecuta, usa el método bind (). aplicar/llamar ejecutará la función inmediatamente
Aplicar, llamar, Bind se usan para cambiar la señalización de este objeto de la función; Los primeros parámetros de aplicar, llamar, enlace son todos objetos a los que esto debe apuntar, es decir, el contexto a especificar; Aplicar, llamar, BIND puede usar todos los parámetros posteriores para pasar los parámetros; Bind Devuelve la función correspondiente, que es conveniente para llamar más tarde; Aplicar, la llamada se llama inmediatamente
El artículo anterior comprende profundamente la diferencia entre los métodos de llamar, aplicar y vincular en JavaScript es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.