La definición y ampliación de las clasesLa definición y ampliación de las clases
Problema que desea una estrategia eficaz para la definición y ampliación de las clases. Teoría Una función es un objeto, y como ilustran las recetas anteriores, es posible asociar propiedades y métodos con una función. ¿Entonces por qué es necesario para crear las clases, ya que las funciones pueden ser transformado en clases? La respuesta se relaciona con el problema de averiguar la instancia de la función. Uso de cierre de JavaScript se puede definir una función dentro de una función, como se muestra en el siguiente código. Fuente: / web / ROOT / ajaxrecipes / JavaScript / functionsareobjects.html función GetFunctionFixed () (var inst = function (cmpval) (assertEquals (cmpval, inst.value);) return inst;) Al utilizar una variable local de la instancia de la función se puede hacer referencia en la aplicación de la función. Esto funciona porque las funciones son objetos, y por lo tanto objeto de referencia que está sucediendo. Solución Utilizando el principio de que las funciones son objetos, es posible crear una clase sin necesidad de utilizar la nueva palabra clave, como ilustra el siguiente ejemplo, que se basa en la función dentro de la función técnica. Fuente: / web / ROOT / ajaxrecipes / JavaScript / definingextendingclasses.html función CreateClassInstance () (var inst = function () (inst.instantiated = 10; inst.method = function () (inst.instantiated = 20;)) inst (); return inst;) En el ejemplo de clase, una "clase" es creado debido a llamar a la función asignará a las propiedades de la función. Así, la función se comporta como una "clase". Inst La variable se hace referencia a toda la "clase", por lo que es posible hacer referencia a las propiedades y métodos de la clase "." En efecto, la "clase" es actuar como una clase real, como lo demuestra el código de prueba siguiente. Fuente: / web / ROOT / ajaxrecipes / JavaScript / function_are_classes definingextendingclasses.html: function () (var cls1 = CreateClassInstance (); info ( "function_are_classes", cls1); cls1.value = 10;assertEquals (10, cls1.instantiated); cls1.method (); assertEquals (20, cls1.instantiated); cls2 var = CreateClassInstance (); assertEquals ( "undefined", typeof (cls2.value));), Los experimentos de código de prueba con las diversas facetas de demostrar que la instancia de "objeto" se comporta como un objeto. El código en negrita indica que los "objetos" cls1 y cls2 se trata de dos casos por separado. Dado que parece tan fácil crear una "clase" y un "objeto", ¿por qué hay una nueva palabra clave? La respuesta es que buscar la forma de remisión de la instancia de la función con el método es complicado después de la "clase" ha creado una instancia, como lo ilustra el siguiente código fuente. Fuente: / web / ROOT / ajaxrecipes / JavaScript / function_classes_generates_error definingextendingclasses.html: function () (var = CLS CreateClassInstance (); cls.method2 = function () ( inst.instantiated = 40; )try ( cls.method2 ();testManager.failed ();) catch (e) (info ( "functions_classes_generates_error", "excepción previstos (" + ➥ e.toString () + ")");)), En la prueba adicional, la "clase" es una instancia y asigna a la variable CLS. Las referencias CLS variable "objeto" que se extiende con el método de la method2. En la aplicación de method2, el "objeto" instancia se hace referencia mediante la variable de inst. El inst variable fue elegido porque se definió cuando el "objeto" se crea una instancia. Al ejecutar el código generará una excepción porque inst no está definido. Para que el ejemplo, la función que hace referencia method2 habría tenido que CLS de referencia. En pocas palabras, hace referencia a la instancia del "objeto" dentro de una función es más complicado de lo que debería ser. La solución es la nueva palabra clave, ya que asocia el este identificador con la instancia del objeto dentro de una función. Re-escribir el código CreateClassInstance utilizar la nueva palabra clave, llegamos a la función CreateRealClassInstance, que se muestra en el siguiente código. Fuente: / web / ROOT / ajaxrecipes / JavaScript / definingextendingclasses.html función CreateRealClassInstance () (var inst = function () (this.instantiated = 10; this.method = function () (this.instantiated = 20;)) return inst nuevo ();) Comparando CreateClassInstance y CreateRealClassInstance, la única diferencia real es que la nueva palabra clave se utiliza al llamar a la variable en función inst, inst y se sustituye con esto. Usar la palabra clave nueva en frente de una función convierte la función en una instancia de objeto personalizado, en el caso de que el objeto puede ser referenciado utilizando el este identificador dentro de la función. La instancia del objeto devuelto puede ser extendido y la instancia de referencia mediante la palabra clave , como se muestra en la siguiente prueba. Fuente: / web / ROOT / ajaxrecipes / JavaScript / function_instantiates_real_class definingextendingclasses.html: function () (var = CLS CreateRealClassInstance (); cls.method2 = function () (this.instantiated = 40;) assertEquals (10, cls.instantiated); CLS . metodo2 (); assertEquals (40, cls.instantiated);), Llamando a la función CreateRealClassInstance, la instancia del objeto devuelto se asigna a la variable CLS. El objeto es ampliado para incluir la method2 método, y en la aplicación de method2 la instancia del objeto se hace referencia a la utilización de dicha variable. Esta vez, cuando se llama method2, no hay excepción, y las instancias de la propiedad tiene un valor de 40. Si usted está familiarizado con JavaScript y ya instancias de algunos objetos, la sintaxis de instancias anteriores probable parece un poco extraño. La forma clásica de crear instancias de un objeto en JavaScript es el siguiente: función MyObject () () var = CLS MyObject nuevo (); Este enfoque implica la definición de una función que la función es un constructor para el objeto de MyObject tipo. Cuando los programadores MyObject se crea una instancia, la notación es muy similar a instancias de un tipo en Java y C #, y por lo tanto que una instancia de tipos en JavaScript no cuestionar lo que realmente sucede. Una explicación más precisa de cómo se define un objeto en JavaScript es cuando la variable de inst fue utilizado para crear una instancia de un objeto. En concreto, un objeto es construido por la conversión de una función en un objeto, y la función asociada con la nueva palabra clave es el constructor. Cuando la manipulación de las clases de JavaScript, recuerda lo siguiente en mente: • Es posible crear tipos de JavaScript sin necesidad de utilizar la nueva palabra clave. Sin embargo, la creación de JavaScript primas "objetos" tiene la desventaja de tener que cruzar la referencia al "objeto" instancia con la función. • los objetos JavaScript son tipos que se pueden asignar de forma dinámica, haciendo posible la aplicación de la programación basada en prototipos, donde el comportamiento del tipo se determina en tiempo de ejecución. • A principios de recetas de este artículo muestra cómo manipular objetos de función, una técnica que también se aplica a los tipos de objetos JavaScript. • La base de todos los objetos JavaScript es el tipo Object. • Cuando utilice la nueva palabra clave a instancia de un tipo, prototipo de la propiedad asociada con el objeto de función se puede utilizar para definir el comportamiento que se aplica a todas las instancias de un tipo determinado. 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 "Definición de las clases y extender" 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: 137 users browsing the articles directory |
|
|