2010-10-08 5 views
7

En javascript es muy popular para bibliotecas/frameworks para permitirnos definir una función de devolución de llamada para el procesamiento posterior de datos.¿Cómo funciona la función load() que permite al usuario proporcionar una devolución de llamada?

por ejemplo.

load("5", function(element) { 
    alert(element.name); 
}); 

Me pregunto cómo se ve la función load() para poder permitir al usuario proporcionar una devolución de llamada?

¿Hay buenos tutoriales para esto?

Respuesta

13

Bueno, la función load podría tener este aspecto:

function load(arg, callback) { 

    var element = { name: "foo " + arg }; // something to pass 

    if (typeof callback == 'function') { 
    callback(element); 
    } 
} 

Con la typeof verificamos que el argumento de devolución de llamada sea un objeto que podamos invocar, una función ción.

Luego, su ejemplo:

load("5", function(element) { 
    alert(element.name); // Will show `"foo 5"`. 
}); 
+0

Guau .. que simple eh. –

1

funciones son como tipos normales y se pueden pasar como argumentos:

function load(param1, callback) { 
    // call the callback parameter one second later 
    setTimeout(function() { 
     callback(param1); 
    }, 1000); 
} 
2
function load(foo, callback) { 
    blah(foo); 
    callback(); 
} 
2
function load(number, callback){ 

    // do something 

    if (callback) { 
     callback(); 
    } 

} 
4

En JavasScript funciones son objetos de primera clase. Eso significa que actúan como otros tipos integrados. Puede asignar a las variables, pasarlas en las funciones, etc.

Este artículo es un enlace muy útil para explicar cómo funciona como objetos de primera clase trabajar en JavaScript: http://helephant.com/2008/08/functions-are-first-class-objects-in-javascript/

Joel Spolsky tiene una explicación detallada e interesante en algunas de las cosas interesantes/maneras en que puede utilizar funciones como objetos de primera clase en JavaScript: http://www.joelonsoftware.com/items/2006/08/01.html

por último, ya que son objetos de primera clase, las funciones pueden aceptar fácilmente otras funciones como parámetros:

var load = function(callback) { 
    // load something here 
    callback(); 
} 
0
function(callback,argumentArray) { 
    var result = callback.apply(this,argumentArray); 
} 

Puntos a tener en cuenta:

  • this puede haber null. En ese caso, si se utiliza this en la implementación de devolución de llamada, apuntaría al objeto Global.
  • argumentArray es en realidad un JavaScript Array de argumentos requeridos por el método de devolución de llamada.
Cuestiones relacionadas