2010-07-16 19 views
5

que acaba de descubrir la manera de crear 'clases' falsos en javascript, pero me pregunto cómo puede almacenarlos y aún así obtener un fácil acceso a sus funciones en un IDE.mejor opción para los contenedores de tipo fuerte en JavaScript

De esta manera:

function Map(){ 
    this.width = 0; 
    this.height = 0; 
    this.layers = new Layers(); 
} 

ahora tengo una función que recorra un XML y crea múltiples mapa() objetos. Si les tienda bajo una sola variable, que se puede acceder a ellos muy bien, al igual que:

map1 = new Map(); 
map1.height = 1; 

Pero yo no sé con qué nombre van a ser almacenados! así que pensé que podía salvarlos de esta manera:

mapArray = {}; 
mapArray['map1'] = new Map(); 

Pero no se puede acceder a las funciones de la siguiente manera: (Por lo menos la finalización de código IDE no recogerlo)

mapArray['map1'].height = 1; 

luego pensé que esta sería la mejor solución:

function fetch(name){ 
    var fetch = new Map(); 
    fetch = test[name]; 
} 

De esa manera podría escribir:

fetch('test').height = 1; 

Pero esto parece que va a generar una gran cantidad de gastos generales variables de la copia de forma continua por el estilo.

estoy pasando por alto algo simple?

+0

¿Realmente desea confiar en la finalización del código IDE? –

+0

-1 Lo siento, pero debe probar su JS en un navegador, no en el IDE. –

+0

No se trata de que el código sea correcto, sé que es correcto, pero no se completa automáticamente y solo quería saber si hay una forma mejor de hacerlo. – skerit

Respuesta

4

La razón por la que no funciona es que, para que un mapa/matriz permita algo dentro de él, debe suponer solo que las cosas adentro son a lo sumo una cosa de muy bajo nivel en el árbol de herencia. Desafortunadamente, a diferencia de proxy Vector<> y objetos en ActionScript, y cosas similares en otros idiomas, esto no es fácil de hacer en Javascript.

How would you overload the [] operator in javascript

La solución que tenga, si eso es lo que le gustaría funcionalidad, se trata de la más simple que puede hacer. También puede hacer una función que devuelve .get(whatever) lo que es [whatever], pero específicamente como el tipo que desee. Y también puedes hacer un .set(whatever,value). Sin embargo, no se detendrá el código de empujar las cosas en el uso de [].

Por un lado, no es una buena idea depender demasiado del IDE para hacer esto por usted, pero intentar escribir mejor las cosas con fuerza no es una mala idea en sí misma.

Actualización:

Para responder a su otra pregunta ...En primer lugar, para probar fácilmente cosas JS simples, es agradable de usar la versión de línea de comandos:

http://blog.thefrontside.net/javascript/learning-javascript-from-the-command-line

https://developer.mozilla.org/en/SpiderMonkey_Build_Documentation

Ahora, estoy tampoco recomendar lo hace sólo para hackear el IDE, pero sólo para mostrar "una manera" de hacerlo:

# js 
js> function FooDataClass(){ this.data = "argh!"; } 
js> function FooClass(){ this.get = GetStuff; this.put = PutStuff; this.stuff = new FooDataClass(); } 
js> function PutStuff(name,stuff){ this[name]= this.stuff = stuff; }  
js> function GetStuff(name){ return this.stuff = this[name]; }  
js> f = new FooClass()  
[object Object] 
js> f.put('bar', new FooDataClass())  
js> f.get('bar')  
[object Object] 
js> f.get('bar').data 
argh! 
js> 

Este poder engañar a su IDE para usted.

+0

Oh, algo así como "función buscar (nombre) {this.get = function() {alerta ('Nombre:' + mapas [nombre]);};}"? Hmm, eso no parece funcionar cuando llamas fetch ("algo"). Get; (o .get()). ¿O tengo que crear una variable a partir de este primero? – skerit

+1

respuesta actualizada ... – eruciform

1

Otra forma es usar un lenguaje fuertemente tipado que se compile en JavaScript. ST-JS es un plugin de Maven que también se integra con Eclipse que le permite escribir su código en Java. El código JavaScript correspondiente se genera cada vez que guarde su archivo. Al usar Java como su idioma original, su IDE respalda muy bien el autocompletado de códigos, la refactorización y las rutas de ejecución de exploración.

No necesita aprender mucho, ya que las API que necesita conocer son exactamente las que usaría en JavaScript: DOM o jQuery. Solo que se presentan de manera fuertemente tipada.

Cuestiones relacionadas