Funciones JavaScripotEl tratamiento de las funciones como objetos de
Problema que desea aprovechar el hecho de que las funciones son objetos (recuerde, todo es un objeto en JavaScript). Teoría Muchas personas piensan que una función es una palabra clave utilizada en JavaScript. Una función también es un objeto que puede ser manipulada. Sabiendo que una función es un objeto que hace que sea muy interesante desde el punto de vista de la escritura de código JavaScript, ya que el código se puede tratar la función como cualquier otro objeto. Esto significa que usted puede asignar funciones a variables, propiedades de la clase, y lo que sea. Solución Una forma de utilizar esta capacidad es aplicar el patrón Factory para devolver un objeto de función. Por ejemplo, en Ajax tiene dos formas de crear una instancia del objeto XMLHttpRequest, y el método usado depende del navegador. El patrón de la fábrica se utiliza para separar la interfaz de la aplicación. Por lo general eso significa que la aplicación de una interfaz, sino porque JavaScript es un lenguaje dinámico, no existe una noción real de una interfaz. En un lenguaje dinámico, una interfaz no es necesario porque se puede llamar a un método directamente sin necesidad de un tipo específico. En el caso de la creación de instancias objeto XMLHttpRequest, el patrón de la fábrica devuelve una referencia de funciones que se pueden utilizar para crear instancias de XMLHttpRequest utilizando la técnica adecuada . En JavaScript, una función es un objeto que puede ser asignado a una variable. Una forma de aplicación de la fábrica que crea la instancia de XMLHttpRequest es utilizar asignaciones de función. La aplicación completa es la siguiente. Fuente: / web / ROOT / ajaxrecipes / JavaScript / functionsareobjects.html función InstantiateIEXMLHttpRequest () (return new ActiveXObject ( "Microsoft.XMLHTTP");) function InstantiateOthersXMLHttpRequest () (return new XMLHttpRequest ();) function FactoryXMLHttpRequest () (if (window. XMLHttpRequest) InstantiateOthersXMLHttpRequest (return;) catch (e) (return InstantiateIEXMLHttpRequest;) throw new error ( "No se pudo crear una instancia de XMLHttpRequest");) En el ejemplo anterior, la función FactoryXMLHttpRequest es la aplicación del modelo de fábrica. Dentro de la implementación de la función son dos declaraciones que comprobar si el explorador que se está ejecutando actualmente. Según el explorador, la sentencia return devuelve una referencia a la función ni la InstantiateIEXMLHttpRequest o la función InstantiateOthersXMLHttpRequest. En ambos casos, la referencia devuelta es una función que será una instancia del objeto XMLHttpRequest. El código que utiliza el método FactoryXMLHttpRequest siguiente. Fuente: / web / ROOT / ajaxrecipes / JavaScript / factory_function functionsareobjects.html: function () (var InstantiateXMLHttpRequest = FactoryXMLHttpRequest (); var xmlhttp = InstantiateXMLHttpRequest (); assertNotNull (xmlhttp);), Observe en el ejemplo de cómo la variable InstantiateXMLHttpRequest puede ser tratada como una función. A título ilustrativo, la variable InstantiateXMLHttpRequest utiliza una combinación de letras mayúsculas y minúsculas para ilustrar que cuando se llama a la variable, se ve como una llamada a la función. Basado en el identificador y el contexto en el que la variable se utiliza como una función, no vas a saber que la variable no es una función. Este es un punto muy importante, porque ilustra que una función es simplemente otro objeto. FactoryXMLHttpRequest está codificado con un enfoque tradicional: el código declara una función que cuando se le devolverá un ejemplo de una función. El comportamiento del código se determina después de que el código ha sido analizado y inicializado. Con JavaScript, esto no es necesario, porque se puede inicializar las funciones cuando el código está siendo analizado para optimizarlo. Por ejemplo, se puede reescribir el código FactoryXMLHttpRequest de la siguiente manera. Fuente: / web / ROOT / ajaxrecipes / JavaScript / functionsareobjects.html En la ejecución vez, el código utilizado para asignar la variable InstantiateXMLHttpRequest se ejecuta en la página HTML se carga. Así, siempre que la variable InstantiateXMLHttpRequest se hace referencia como una función, la manera adecuada de crear instancias de XMLHttpRequest es ejecutado. No hay necesidad de llamar a una fábrica y tomar una decisión cada vez que la función se llama. Esta capacidad de tratar las funciones como objetos añade una faceta interesante de codificación, en que el comportamiento del código se puede determinar en tiempo de ejecución. Donde normalmente usaría una estructura de decisión para determinar el comportamiento apropiado, una variable asignada dinámicamente puede ser utilizado. Debido a una función es un objeto, hay algunas posibilidades de codificación adicional. Por ejemplo, es posible asignar dinámicamente propiedades y métodos para una función, como se muestra en el ejemplo siguiente. Fuente: / web / ROOT / ajaxrecipes / JavaScript / functionsareobjects.html función FunctionFunctionProperties (cmpval) (assertEquals (cmpval, FunctionFunctionProperties.value);) var VariableFunctionProperties = function (cmpval) (assertEquals (cmpval, VariableFunctionProperties.value);) var = startIndex VariableFunctionProperties . toString (). indexOf ("{"); endIndex var = VariableFunctionProperties.toString (). lastIndexOf ("}"); buffer VariableFunctionProperties.toString var = (). rebanada (startIndex + 1, endIndex); InstantiatedFunctionProperties var = new (función de "cmpval", buffer); Este ejemplo muestra tres declaraciones de función, con cada declaración que ilustra una forma diferente de declarar una instancia de la función. La primera declaración, FunctionFunctionProperties, es el enfoque tradicional. La segunda declaración, VariableFunctionProperties, utiliza una variable y una función anónima. Y la tercera declaración, InstantiatedFunctionProperties, es un ejemplar el objeto explícito de la función, donde los parámetros del constructor representan la declaración de los parámetros, y el último parámetro es el cuerpo de la función. El cuerpo de la función es un buffer de código JavaScript que se convierte en JavaScript ejecutable. Para cada una de las implementaciones de la función, el nombre de la función se hace referencia y se adjuntará, con una referencia al valor de la propiedad. Con todos y cada instancia de la función se puede asignar una propiedad o, si así lo desean, otra referencia de la función. Usted puede pensar en propiedades como una forma de declarar una variable que está asociada con la función. Debido a que cada una de las tres declaraciones de funciones representa un objeto y una variable, se les puede llamar de una manera idéntica, como se ilustra en el siguiente ejemplo. Fuente: / web / ROOT / ajaxrecipes / JavaScript / function_with_properties functionsareobjects.html: function () (VariableFunctionProperties.value = 10; VariableFunctionProperties (10); FunctionFunctionProperties.value = 10; FunctionFunctionProperties (10); InstantiatedFunctionProperties.value = 10; InstantiatedFunctionProperties (10) ; testManager.success ();), Leyendo el código que llama a las funciones declaradas toma un poco de tiempo para acostumbrarse. Antes de cada llamada de función, el identificador se usa como si fuera un objeto. Después de que el objeto se hace referencia, el objeto se llama como una función. Estos ejemplos indican claramente que las funciones tienen un carácter dual, en donde las funciones son objetos y los objetos pueden ser funciones. Esta doble naturaleza plantea un problema: ¿cómo sabe la función de implementación de la instancia de la función? El código siguiente ilustra este problema. Fuente: / web / ROOT / ajaxrecipes / JavaScript / function_with_properties functionsareobjects.html: function () (VariableFunctionProperties.value = 10; VariableFunctionProperties (10); FunctionFunctionProperties.value = 10; FunctionFunctionProperties (10); InstantiatedFunctionProperties.value = 10; InstantiatedFunctionProperties (10) ; testManager.success ();), Leyendo el código que llama a las funciones declaradas toma un poco de tiempo para acostumbrarse. Antes de cada llamada de función, el identificador se usa como si fuera un objeto. Después de que el objeto se hace referencia, el objeto se llama como una función. Estos ejemplos indican claramente que las funciones tienen un carácter dual, en donde las funciones son objetos y los objetos pueden ser funciones. Esta doble naturaleza plantea un problema: ¿cómo sabe la función de implementación de la instancia de la función? El código siguiente ilustra este problema. Fuente: / web / ROOT / ajaxrecipes / JavaScript / GetFunction función functionsareobjects.html () (return function (cmpvalue) (assertEquals (cmpval, unknownfunctioninstance. value);)) En el ejemplo, la función GetFunction tiene una aplicación que devuelve una instancia única función que cada uno de los GetFunction tiempo se llama. Si usted quisiera hacer referencia a una propiedad de la instancia de función, sería difícil hacerlo, porque una función anónima no tiene identificador asociado. En los ejemplos anteriores, la referencia a la instancia de la función se utiliza para hacer referencia a las propiedades y métodos del objeto de la función. El uso de esta forma de declarar la función, no hay identificador de instancia asociada, y no hay forma de poder hacer referencia a la propiedad de la función anónima. La solución es usar una variable interna que se hace referencia, como demuestra el siguiente ejemplo. Fuente: / web / ROOT / ajaxrecipes / JavaScript / functionsareobjects.html función GetFunctionFixed () (var inst = function (cmpval) (assertEquals (cmpval, inst.value);) return inst;) ¿Cómo el código que corrige el problema de la instancia desconoce realmente funciona incluso puede parecer un poco misterioso al principio. Se trata de la utilización de una técnica de programación se conoce comúnmente como cierre. Para entender cómo los cierres de trabajo, recuerde que pensar en una función como un objeto, no una función clave construir. Esto es lo que sucede en pocas palabras: 1. La persona que llama pide GetFunctionFixed. 2. La aplicación de GetFunctionFixed se ejecuta. 3. Una función anónima se declara, y un objeto de la función se crea una instancia. 4. La función anónima instancia se asigna a la variable local declaró inst. 5. El anónimo referencia de las funciones inst, y el procesador de JavaScript lo entiende y crea una referencia a la variable local declaró. 6. La variable de inst se devuelve a llamante. 7. Los intentos de recolector de basura para recoger la basura inst, pero no puede porque las referencias función anónima inst mientras anónima se hace referencia a alguna parte. Al considerar los pasos de este proceso junto con el hecho de que todo es un objeto, es fácil ver cómo este código funciona. Cuando un objeto de referencia a otro objeto, los objetos sólo pueden ser recogidas de basura, si no nada de referencia. Al utilizar las funciones y tratarlos como objetos, recuerda lo siguiente en mente: • Las funciones son objetos, y que pueden manipularse como objetos JavaScript. Sin embargo, porque las funciones son objetos, utilizando las funciones de forma abusiva o propiedades de las funciones de forma incorrecta puede causar pérdidas de memoria, Donde la memoria se hace referencia y no recogida de basura, a pesar de que el guión no está haciendo uso de la memoria. • Una configuración de las funciones o métodos es posible cuando la página HTML se está cargando. Esto ahorra procesamiento de la lógica, ya que el código no es necesario para determinar cuál es el código debe ser ejecutado. • Toma un poco de tiempo y la experimentación para acostumbrarse a la idea de que el comportamiento del código se determina en tiempo de ejecución, y no mientras se está escribiendo el código. • Ser objetos, las funciones pueden propiedades o los métodos de referencia, lo que permite funciones para definir el comportamiento en tiempo de ejecución. Si asigna propiedades o métodos a las funciones, y luego hacerlo con el entendimiento de que las propiedades y métodos son transitorios, es decir, si una función se copia de un caso a otro, no asuma que las propiedades se copian demasiado. un artículo presentado por Sonja Lande Descargo de responsabilidad:Nuestro sitio web no es responsable por el contenido de este artículo. Webarticles es un recurso de información gratuito. Importante: Este artículo "JavaScripot funciones" fue traducida por un software automático. Sentimos pena por los errores de ortografía que pueda haber ocurrido. Gracias por su comprensión.
|
|||||
| Online: 259 users browsing the articles directory |
|
|