Aplicar () Definición del método
El método Apply () de la función y el método de llamada tienen la misma función, pero la diferencia es que los parámetros recibidos son diferentes.
El método Apply () recibe dos parámetros, uno es un objeto y el otro es una matriz de parámetros.
Aplicar () función
1. Se utiliza para extender el alcance de la función
Ejemplo:
var color = 'rojo'; var o = {color: 'azul'}; función sayscolor () {console.log (this.color);} saycolor (); // "rojo" saycolor.apply (o); // "azul"Aquí, la función está vinculada dinámicamente al objeto O a través del método Aplicar (). En este momento, esto apunta al objeto O y obtiene el resultado "azul".
2. Los objetos no necesitan tener ninguna relación de acoplamiento con los métodos.
Demos un ejemplo de acoplamiento a continuación para ver cómo resolver este acoplamiento aplicando.
var color = 'rojo'; var o = {color: 'azul'}; función sayscolor () {console.log (this.color);} o.saycolor = saycolor; o.saycolor (); // "azul"Aquí, la función se coloca primero en el objeto O, y el objeto y el método están estrechamente acoplados, y la llamada del método debe pasar a través del objeto o.
No es tan flexible como usar los métodos Apply () y llamar ().
Refactorizar el código anterior para obtener el código en el ejemplo anterior.
var color = 'rojo'; var o = {color: 'azul'}; función sayscolor () {console.log (this.color);} saycolor (); // "rojo" saycolor.apply (o); // "azul"No hay ningún método vinculado al objeto aquí, pero cuando es necesario usarlo, use el método de aplicación o llamada de la función para unirlo dinámicamente.
No hay acoplamiento entre objetos y métodos. Aquí también se puede hacer a través del método Bind () proporcionado por ES5.
3. Implementar la transferencia de parámetros de la función de parámetros variables
La siguiente función para calcular el valor promedio de cualquier número
promedio (,,); promedio (); promedio (,,,,,,); promedio (,,,,,,); promedio (,,,,,,,););
La función promedio es un ejemplo llamado parámetro mutable o función de elemento mutable (el número de elementos de una función se refiere a su número deseado de parámetros).
Por supuesto, esta función también se puede escribir en forma de una matriz de recepción.
promediofarray ([,,]); promediofarray ([]); promediofarray ([,,,,,,,]); promediofarray ([[,,,,,,,,,]);
Las funciones que usan parámetros variables son más concisas y elegantes. Las funciones de parámetros variables tienen una sintaxis conveniente, al menos permitiendo que la persona que llama sepa de antemano cuántos parámetros se proporcionan.
Si tengo una matriz como esta
VAR puntajes = getAllScores ();
¿Cómo calcular el valor promedio usando la función promedio?
1. Versión de función de parámetro variable.
En este momento, se puede utilizar junto con el método Aplicar (). Debido a que la función no usa referencia esta variable, pasamos un nulo para el primer parámetro. El código es el siguiente:
VAR puntajes = getAllScores (); promedio.apply (nulo, puntajes);
2. Los parámetros directos están en forma de matriz
Aquí puede pasar directamente los parámetros de la matriz.
VAR SCORES = GetAllScores (); promedio de ARRAY (puntajes);
Personalmente, creo que las dos formas anteriores están bien, pero la segunda es más simple. Conozca más sobre un método, que se puede tratar fácilmente al encontrar funciones escritas por otros sin refactorizar el código. Este beneficio es aún más.
4. Implemente la transferencia de valor de los métodos de parámetros variables
Ejemplo: el objeto de búfer contiene un método de apéndice de parámetros mutables, que se agrega a la matriz de estado dentro de la función.
var buffer = {state: [], append: function () {for (var i =, n = arguments.length; i <n; i ++) {this.state.push (argumentos [i]);}}};En este momento, el método Append puede aceptar cualquier parámetro múltiple.
buffer.append ('hola', '); buffer.append (' firtname ',' ',' lastName ','! '); buffer.append (' newline ');Forma como
buffer.append (arg1, arg2, arg3, ...)
Con este parámetro del método de aplicación, podemos especificar una matriz computable para llamar al método de adición.
buffer.append.apply (buffer, getInputStrings ());
Nota: El búfer aquí es importante. Si se aprueba un objeto diferente, el método Append intentará modificar la propiedad de estado del objeto incorrecto.
pista
• Use el método Aplicar para especificar una matriz de parámetros computable para llamar a una función con parámetros mutables
• Use el primer parámetro del método de aplicación para proporcionar un receptor para el método de parámetro variable
Apéndice 1
función promedio
función promedio () {var args = []. slice.call (argumentos); var sum = args.reduce (function (anterior, cur) {return prev+cur;}); return parseint (sum/args.length,);}función promedio
Función promediofarray (arr) {var sum = arr.reduce (function (anterior, cur) {return prev+cur;}); return parseInt (sum/arr.length,);}Método ES5 bind ()
Este método crea una instancia de una función cuyo valor está vinculado al valor pasado a la función bind ().
Por ejemplo
var color = 'rojo'; var o = {color: 'azul'}; función sayscolor () {console.log (this.color);} var osayColor = saycolor.bind (o); osayColor (); // "azul"Compatible con versiones más bajas, consulte la siguiente versión:
if (! function.prototype.bind) {function.prototype.bind = function (othis) {if (typeof thyof this! == 'function') {// lo más cercano posible para el ecmascript // interno IScallable functionTrow new typeError ), fTobind = this, fnop = function () {}, fbound = function () {return fTobind.Apply (esta instancia de fnop? this: othis, aargs.concat (array.prototype.slice.call (argumentos));}; if (this.prototype) {// function.prototype no tiene un prototipo de prototipo this.prototype; } fbound.prototype = new fnop (); return fbound;};}