Método de llamada de función
Antes de hablar sobre los tres hermanos, solicite, llame y vincule en JavaScript, me gustaría hablar sobre cuáles son los métodos de llamadas de funciones:
• en función
• Como método
• Como constructor
• Llame indirectamente a través de sus métodos de llamada () y aplicar ()
Todos conocemos los tres métodos de llamadas anteriores y no estamos dentro del alcance de este artículo, por lo que no hablaremos de ellos.
Hablemos del cuarto método de llamadas
Llamadas indirectas a través de la llamada () y aplicar ()
De hecho, podemos considerar estas dos funciones como métodos de cierto objeto, e indirectamente llamar a la función llamando al método:
función f () {} f.call (o); f.apply (o);El primer parámetro de llamada () y aplicar () es el objeto principal para llamar a la función. Es el contexto de llamada, y una referencia a él se obtiene a través de esto dentro del cuerpo de la función.
Entonces, ¿son iguales o hay diferencias, y también el método de enlace? No se preocupe, analicemos las diferencias y conexiones entre las tres siguientes en detalle.
llamar()
El método de llamada () especifica un puntero específico (idiota, no me moleste sobre su corrección) y los parámetros del método que lo llama. Por ejemplo, hay una función como esta:
var fn = function (arg1, arg2) {console.log (this, arg1, arg2); }Lo llamaré:
fn.call (nulo, 'skylor', 'min'); //1fn.call(Udefined, 'Skylor', 'Min'); // 2var fx = function () {} fn.call (fx, 'skylor', 'min'); // 3¿Cuáles son los valores de retorno de estos tres métodos de llamadas? Sin tonterías, por favor vea:
1. NULL "SKYLOR" "Min" 2. "Skylor" undefinado "Min" 3. FX "Skylor" "Min"
¿Es este realmente el caso? Eres inteligente, ve a la consola del navegador y prueba. Iré, eres un tramposo, eso no es así:
Chrome1. Ventana "Skylor" "Min" 2. Ventana "Skylor" "Min" 3. FX "Skylor" "Min"
Ok, eres inteligente. Pero esto ya ilustra muy bien el método de llamada. (La ventana está muy avanzada, Microsoft está riendo ...)
Notamos que el método de llamada, el primer parámetro es especificar este puntero, y cada parámetro después de eso especifica los parámetros requeridos. Tenga en cuenta que uso "cada uno", lo que significa que necesita varios parámetros y desea llamar a la función, y escribir cada parámetro uno por uno.
aplicar()
aplicar () es el hermano de la llamada (). Los otros lugares se ven iguales, todos son hombres, pero son diferentes en un solo lugar. Echemos un vistazo al ejemplo primero:
fn.apply (nulo, ['skylor', 'min']); //1fn.apply(fx, ['skylor', 'min']); // 2
Hermano, ¿lo has escrito mal? Hay más soportes. No, no, no, esto es lo que lo hace parecer diferente de la llamada. Su segundo parámetro es la matriz de parámetros requerido.
unir()
Bind (), no son tres hermanos, entiendo esto, Blabla ... No, no, es un hermano jurado que se ha convertido en hermanos jurados con aplicados y llamadas, no un hermano real.
Por supuesto, el método de enlace también le permite especificar este puntero, pero en lugar de llamar a una función, devuelve una función (o una copia) que lo llama, y especifica un específico de este puntero y parámetro a esta función. Convención, ejemplos ilustran todo:
var fnbound = fn.bind (nulo, 'skylor', 'min');
En este momento, FnBound es una función, otra función con este punto a NULL y los parámetros son ['Skylor', 'Min']. Llamado:
fnbound ();
resultado:
nulo, 'Skylor', 'Min'
No te preocupes por la ventana conmigo. . . . .
La diferencia entre Bind y los otros dos hermanos es que no llama a una función, sino que devuelve una nueva función. Del mismo modo, también especifica este puntero y parámetro. El método para especificar los parámetros es el mismo que la llamada, y viene uno por uno.
Tengamos un último ejemplo:
var shoppingCart = (function () {var _calculatePrice = function () {return this.price * this.amount;}; return {calculatePrice: _calCulatePrice}}) (); var bien = {name: 'Hammer', precio: 199, cantidad: 2}; compatingCart.CalCalPrice.call (bienes);Esto termina. !
Lo anterior es todo el contenido de aplicar, llamar y vincular en JavaScript presentado por el editor. 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!