Comprender las ramificaciones de pato con tipo de CódigoComprender las ramificaciones de pato con tipo de Código
Problema que usted quiere entender el lugar mejor para escribir pato uso y las cuestiones que deben ser conscientes de la hora de utilizarlo. Teoría, no existe una diferencia entre un tipo de valor y tipo de referencia en JavaScript. Incluso para un tipo de referencia, hay una diferencia entre la definición de la referencia como un valor o una referencia pura. Pero si te importa la diferencia? ¿Es algo que tiene que tener en cuenta? Es cuando usted está tratando de hacer algo concreto. JavaScript es un lenguaje único, ya que tiene un tipo de pato, tipo latente, y las características del prototipo. Para crear un tipo de JavaScript, puede definir el tipo de definición a través de un prototipo, o puede definir los métodos y propiedades mediante la asignación de una instancia de clase. En general, usted tiene la capacidad de alambre junto tipos dinámicamente en tiempo de ejecución. Hay dos maneras de aplicar escribir pato: los tipos de valor y los tipos de referencia. Usted debe ser consciente de ambos tipos, aunque en este artículo Imostly valor de uso de tipificación de pato tipo. No estoy diciendo que uno es mejor que el otro sólo que cada uno tiene ventajas y desventajas. Los desarrolladores tienden a elegir uno sobre el otro sobre la base de sus hábitos de programación. Por ejemplo, yo prefiero escribir el valor de pato porque tiendo a serializar los objetos para su uso posterior. Solución Vamos con un ejemplo de pato a escribir utilizando los valores de referencia. Considere el siguiente código, que se utiliza para crear una función sin parámetros que contiene un estado. Fuente: / cliente / ajaxrestrecipes / JavaScript / valuevsreferencetypes.js función CallMeReference (toCall, valor) (return function () (toCall (valor);)) En el código anterior, la función CallMeReference tiene dos parámetros: toCall, que es una función, y el valor, que es el Estado utiliza para llamar a la toCall función. La idea detrás de CallMeReference es crear una función que no tiene parámetros, pero se llama usando un estado definido anteriormente. El código de la siguiente podría ser utilizado para ejecutar un ejemplo: func var = CallMeReference (function (param) (info ( "Param es (" + param + ")");), "Hello World"); func (); En este ejemplo, la variable de función se utiliza para generar un encapsulado "hola mundo" mensaje. La variable de funciones puede ser llamado en varias ocasiones, y el mismo mensaje es generado. La variable podrían ser asignados a otras variables y el mensaje se generará la misma. Debido a que somos programadores, crearemos las funciones que siguen el patrón del constructor y del precreate funciones con ciertos estados. Las dos funciones siguientes implementar el patrón de Astillero: función Version1Reference () (return CallMeReference (function (param) (info ( "Versión 1 es (" + param + ")");), ➥ "Hello World");) function Version2Reference () (return CallMeReference (function (param ) (info ( "Versión 2 es (" + param + ")");), ➥ "Hello World");) El Version1Reference y funciones Version2Reference generar funciones con ligeras diferencias. Las funciones genera resultante puede ser asignados a las variables y luego pidió como en el ejemplo anterior. Hasta este punto, todo lo que he mostrado es algo que podría hacer uso de los lenguajes de programación tradicionales, tales como C #, Java y C + +. Aquí, sin embargo, estamos usando JavaScript, que se aplica a escribir el pato y el prototipo basado en las características, lo que significa que si una función se asigna a una variable, no sabemos cómo ocurrió esa asignación. Esta necesidad de saber quién ha hecho qué tarea no importa en C + +, C # o Java, porque el programador se define el orden y el diseño de los tipos antes de tiempo, y durante el tiempo de ejecución de esa orden no se puede cambiar. En JavaScript, este orden no está definido antes de tiempo se define en tiempo de ejecución. Por ejemplo, el código siguiente es posible: if (bandera) (func = Version1Reference ();) else (func = Version2Reference ();) Cuando la función se le ha asignado, no sé si fue asignado mediante el código de Version1Reference o de Version2Reference. Cuando se ejecuta el código asignado, que lógicamente se puede determinar a partir del comportamiento si se ha utilizado el Version1Reference o función Version2Reference. La razón que digo que usted no sabe que se ha asignado el código se debe a que cuando se serializa la función variable, se genera el siguiente código: function () (toCall (valor);) El código generado le dice que el toCall y el valor de las variables han sido asignados, pero no sé a qué. Esto puede ser problemático si usted está tratando de serializar un objeto que hace referencia a la función generada. Si la función de serializar y tratar de ejecutar la función, un error se genera porque el toCall y el valor de las variables no se definen. Puede serializar el estado de los miembros de datos, pero los métodos de serialización de las causas de estado se lost.For ejemplo, imagine que usted está escribiendo una solicitud de hipoteca, y usted está creando actualmente un cliente. El cliente tiene una cierta edad, dirección, y el perfil. En un entorno de programación tradicional, que se asocian con el estado de un objeto cada vez que el Estado está cargado. Esto significa que cada vez que el Estado está cargado, que tiene que ejecutar varias implementaciones patrón Builder para crear el tipo de objeto adecuado. Uso de JavaScript, esto no es necesario porque el estado del objeto, incluidos los métodos, pueden ser en serie. Esto hace posible para serializar un objeto completo, almacenarlo en una base de datos, o ejecutar en otro contexto. Funciones dinámicas necesidad de utilizar los tipos de valor, lo que significa CallMeReference tiene que ser modificada como sigue: función CallMeValue (toCall, valor) (return eval ( "function () (func var =" + ➥ toCall.toString () + "; func ( '" + valor.toString () + "');)");) La función CallMeValue es como CallMeReference, excepto que se serializa la función y el valor a las reservas de cadena que se concatenan y ejecutado. El resultado de la ejecución es una función que cuando se serializa genera el buffer siguientes: function () (var func = (function (param) (info ( "Param es (" + param + ")");}); ➥ func ( "Hello World");) La función de serializar se comporta exactamente como la función creada en CallMeReference, pero la función de valor se pueden serializar y ejecutada en otro equipo o en otro contexto. Al escribir código que el código de cables juntos de forma dinámica, es necesario pensar si el uso o valor de referencia de programación técnicas. Al escribir este código, tenga en cuenta las siguientes reglas de oro: • Tipos de pato de referencia deben ser considerados como tipos transitorios que sólo viven para la extensión de la ejecución de JavaScript (por ejemplo, una página HTML). • Tipos de pato de referencia se crean usando el patrón Builder. • Una vez creados, los tipos de patos de referencia tienen una ventaja de rendimiento escaso, ya que no necesitan la sobrecarga de ejecutar la instrucción eval en la aplicación patrón Builder. • Tipos de referencia de pato puede compartir los casos a instancias de objetos múltiples, ya que son la asignación de referencias. • Tipos de pato valor debe ser considerado como a largo plazo de objetos serializable donde el estado y el código puede ser serializado. • Tipos de pato valor se crean usando el patrón Builder. • Tipos de pato de valor son un poco más lento que los tipos de patos de referencia debido a que el código es el resultado de serialización, la creación de un buffer, y luego evaluar el buffer. • Tipos de pato de valor no tienen el efecto secundario de tener funciones se comportan de forma irregular a causa de las instancias del objeto asignado. Cada llamada a un valor de pato resultados patrón tipo Builder en un enfoque de limpieza de pizarra, donde las variables se les asigna el estado dado que el patrón Builder. 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 "comprender las ramificaciones de pato con tipo de Código" 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: 256 users browsing the articles directory |
|
|