Muchos de mis amigos son desarrolladores de C # o C ++. Están acostumbrados a usar la herencia en sus proyectos, y cuando quieren aprender o descubrir JavaScript, una de las primeras preguntas que hacen es: "¿Pero cómo puedo hacer la herencia con JavaScript?"
En realidad, JavaScript utiliza un enfoque diferente al de C # o C ++ para crear un lenguaje orientado a objetos. Es un basado en prototipo idioma. El concepto de prototipado implica que el comportamiento puede ser reutilizado por clonación. existente Objetos que sirven de prototipos. Cada objeto en JavaScript depende de un prototipo que define un conjunto de funciones y miembros que el objeto puede usar. No hay objetos de clase justa. Cada objeto puede ser utilizado como prototipo para otro objeto..
Este concepto es extremadamente flexible, y podemos usarlo para simular algunos conceptos de OOP, como la herencia.
Veamos lo que queremos crear con esta jerarquía mediante JavaScript:
En primer lugar, podemos crear Clase A
fácilmente. Debido a que no hay clases explícitas, podemos definir un conjunto de comportamiento (una clase para ...) simplemente creando una función como esta:
var ClassA = function () this.name = "class A";
Esta "clase" puede ser instanciada usando el nuevo
palabra clave:
var a = new ClassA (); ClassA.prototype.print = function () console.log (this.name);
Y para usarlo utilizando nuestro objeto:
una impresión();
Bastante simple, a la derecha?
La muestra completa tiene solo ocho líneas de largo:
var ClassA = function () this.name = "class A"; ClassA.prototype.print = function () console.log (this.name); var a = new ClassA (); una impresión();
Ahora agreguemos una herramienta para crear "herencia" entre clases. Esta herramienta solo tendrá que hacer una sola cosa: clonar el prototipo.
var inheritsFrom = function (child, parent) child.prototype = Object.create (parent.prototype); ;
¡Aquí es exactamente donde ocurre la magia! Al clonar el prototipo, transferimos todos los miembros y funciones a la nueva clase.
Entonces, si queremos agregar una segunda clase que será hija de la primera, solo tenemos que usar este código:
var ClassB = function () this.name = "class B"; this.surname = "Soy el niño"; inheritsFrom (ClassB, ClassA);
Entonces porque Clase B
heredó el impresión
función desde Clase A
, El siguiente código está funcionando:
var b = new ClassB (); b.print ();
Y produce la siguiente salida:
clase B
Incluso podemos anular el impresión
función para Clase B
:
ClassB.prototype.print = function () ClassA.prototype.print.call (this); console.log (this.surname);
En este caso, la salida producida se verá así:
clase B soy el niño
El truco aquí es llamar ClassA.prototype
para obtener la base impresión
función. Entonces gracias a la llamada
función que podemos llamar la función base en el objeto actual (esta
).
Creando Clase C
ahora es obvio:
var ClassC = function () this.name = "class C"; this.surname = "Soy el nieto"; inheritsFrom (ClassC, ClassB); ClassC.prototype.foo = function () // Haga algunas cosas extrañas aquí ... ClassC.prototype.print = function () ClassB.prototype.print.call (this); console.log ("Suena como si esto estuviera funcionando!"); var c = new ClassC (); c.print ();
Y la salida es:
clase C soy el nieto Suena como si esto estuviera funcionando!
Puede que te sorprenda un poco, pero Microsoft tiene un montón de aprendizaje gratuito sobre muchos temas de código abierto de JavaScript, y estamos en la misión de crear mucho más con Microsoft Edge. Echa un vistazo a mi propia:
O la serie de aprendizaje de nuestro equipo:
Y algunas herramientas gratuitas: Visual Studio Community, Azure Trial y herramientas de prueba en varios navegadores para Mac, Linux o Windows.
Para concluir, solo quiero indicar claramente que JavaScript no es C # o C ++. Tiene su propio filosofía. Si eres un desarrollador de C ++ o C # y realmente quieres aprovechar todo el poder de JavaScript, el mejor consejo que puedo darte es: No intentes replicar tu lenguaje en JavaScript. No hay mejor o peor lenguaje. Solo diferentes filosofias!
Este artículo es parte de la serie web dev tech de Microsoft. Estamos muy contentos de compartir Microsoft Edge y lo nuevo Motor de renderizado EdgeHTML con usted. Obtenga máquinas virtuales gratuitas o realice pruebas a distancia en su dispositivo Mac, iOS, Android o Windows @ http://dev.modern.ie/.
Aprender JavaScript: la guía completa
Hemos creado una guía completa para ayudarlo a aprender JavaScript, ya sea que esté comenzando a trabajar como desarrollador web o si desea explorar temas más avanzados..