2012-02-15 8 views
9

He estado usando Java durante mucho tiempo, y durante bastante tiempo estuve haciendo desarrollo web usando GWT (Google Web Toolkit). Lo mejor de todo es que tenía mis construcciones orientadas a objetos Java y no me preocupaba cómo se traduce a GWT, deja que Google se encargue de ello. Mi conocimiento de Javascript era suficiente, pero no en la medida en que pudiera hacer un desarrollo web pesado con él. Más tarde decidí que tenía que obtener una comprensión más profunda y más completa de Javascript y esta ha sido una verdadera montaña rusa, justo en un momento en el que creo que obtengo algo, algo viene y me demuestra que estaba equivocado, que simplemente incomprendido.Conceptos orientados a objetos Java en Javascript

¿Qué mejor lugar para expresar mi preocupación de stackoverflow: estoy pidiendo para algunos recursos y referencias a lo que sería una Javascript equivalente a algunos de los siguientes conceptos de Java:

Class 
instance of a class - object 
Member variables 
Getters 
Setters 
Abstract Class 
Interface 
Inheritance 
Access Modifiers 
Constructors 

Sé que algunos de esos conceptos , pero como dije, creo que tengo algunas dificultades conceptuales. Si alguien pudiera apuntar a los intentos reales de un javascript guru de precisar estos conceptos, me sentiría muy feliz.

+1

Es una buena pregunta, pero voy a votar para cerrar ya que su alcance es muy amplio. – Perception

+3

El hecho es que la mitad de esos conceptos no existen en JS, en parte debido a la OOP prototípica y en parte a la tipada dinámica. No llegará muy lejos tratando de traducir conceptos individuales. – delnan

+2

Voto en contra del cierre porque no quiere que expliquemos esto. Él solo quiere enlaces a buenos recursos. –

Respuesta

3

He estado en la misma búsqueda que tú pero he tenido que buscar y buscar conocimiento por todas partes.

Hay toneladas de publicaciones excelentes en stackoverflow para todos estos temas, y luego está MDN. También recomendaría buscar en la fuente de bibliotecas populares como jquery. Ver este visor fuente http://james.padolsey.com/jquery/

Este es un tutorial interactivo BRILLANTE por el gran John Resig:
http://ejohn.org/apps/learn/

Éstos son algunos muy bueno, así los mensajes que me ayudaron a entender JS mejor:

How to "properly" create a custom object in JavaScript?
What is the 'new' keyword in JavaScript?
Why is JavaScript prototyping? Why is it necessary to set the prototype constructor?
Call base method in Javascript using Douglas Crockford's functional inheritance
Help understanding jQuery's jQuery.fn.init Why is init in fn
What does jQuery.fn mean?
Why 'this' resolution is so special in JavaScript?
What is the difference between call and apply?
Dynamic function call (apply)
JavaScript data formatting/pretty printer
Checking if a key exists in a JavaScript object?

Aquí hay algunos anuncios sobre el quirkyness de javascript y cosas que prolly no lo sabía:

Is it possible to reflect the arguments of a Javascript function?
function arguments
What is the !! (not not) operator in JavaScript?
How does this JavaScript/JQuery Syntax work: (function(window, undefined) { })(window)?
Which equals operator (== vs ===) should be used in JavaScript comparisons? Behavior of delete operator in javascript
var myArray =[], name;?
Why is null an object and what's the difference between null and undefined?
Checking for null/undefined in JavaScript
What does the exclamation mark do before the function?

6

Creo que principalmente necesitas entender que Javascript es un lenguaje OOP puro, pero no tiene clases! ... Eso para un programador de Java es un gran shock, y toma un tiempo para entenderlo , pero es un paradigma bastante poderoso.

Este video aquí es de Douglas Crockford, un tipo que ayudó a la creación de Javascript, brillante para los nuevos programadores de Javascript

http://www.youtube.com/watch?v=v2ifWcnQs6M

+0

JavaScript * no * es un lenguaje OOP puro, pero ofrece [basado en objetos] (https://en.wikipedia.org/wiki/Object-based_language) y [basado en prototipos] (https: //en.wikipedia .org/wiki/Prototype-based_programming) características. – ingyhere

3

Pues bien, la regla básica en JavaScript es que le permitirá hacer casi cualquier cosa. No hay modificadores de acceso. Como JavaScript no evita mucho, cosas como la clase abstracta simplemente no tienen sentido. Siempre puedes crear una instancia.

El comportamiento vagamente similar a la clase proviene de Objetos y puede obtener un comportamiento similar al del constructor usando un prototipo. http://www.javascriptkit.com/javatutors/proto.shtml

Las variables de miembros son similares pero sin tipo, y también pueden contener funciones y datos.

En JavaScript necesita disciplina personal y fuertes convenciones de código para simular cualquiera de esas cosas, pero el lenguaje no le ayudará un poco. Es ultra flexable, lo que significa que no se interpone en su camino, pero también le da un montón de cuerda para colgarse también.

Lo mejor es abordarlo como un idioma completamente diferente. No intente relacionarlo con Java, porque es fundamentalmente diferente en muchos aspectos.

El nombre que es la parte más relacionada de todo lo que crea mucha confusión ...

5

Douglas Crockford explica cómo imitar estas características orientadas a objetos muy bien. Su libro JavaScript: The Good Parts es uno que creo que todos deberían leer y explica cómo sacar el máximo provecho de las características a menudo confusas de JavaScript.

Pruebe this brief tutorial por una forma básica de obtener métodos y propiedades de clases privadas a través de cierres. Además, this tutorial le mostrará cómo lograr la herencia clásica.

1

No puedo pensar en un par de referencias que responderán a la mayoría de estas preguntas, entre ellas es de forma explícita tating que JavaScript es un lenguaje dinámico de tipeo flojo versus Java como un lenguaje estático fuertemente tipado. Siento que este es el tipo de analogía directa que estás buscando.

Muchas preguntas generales de los primeros cinco elementos enumerados tendrán luz sobre ellas con una lectura rápida de la sección "Working with Objects" del JavaScript Guide en el Mozilla Developer Network. (Clase, instancia de una clase - objeto, Variables miembro, Getters, Setters)

El segundo grupo de elementos creo que se explica muy bien en this site de Douglas Crockford, quien escribió el libro O'Reilly "Javascript: The Good partes ", así como la herramienta de código JSLint. (Clase abstracta, interfaz, herencia, modificadores de acceso, constructores) Crockford hace analogías muy directas entre Java y JavaScript en una página que describe cómo JavaScript supports not only classical inheritance, but other code reuse patterns as well.

3

JavaScript es un lenguaje orientado a objetos puro, sin embargo, carece de algunos de los conceptos de los lenguajes de programación orientada a objetos basado en clases como Java o C# Sin embargo, la buena noticia es que la buena gente de ECMA están trabajando en la materia para llevar conceptos OO como la abstracción, clases, espacio de nombres, la herencia, la propiedad ... en JavaScript

Peter Michaux has a good explanation on this

+0

Muchas gracias por el enlace ... – oneiros

1

he tenido un choque muy similar a la que ha tenido al intentar entrar en Javascript. Javascript las partes buenas de Douglas Crockford y su sitio http://crockford.com/ han demostrado ser de gran ayuda para mí.

Cuestiones relacionadas