Ver Mensaje Individual
  #13 (permalink)  
Antiguo 04/03/2009, 10:10
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Object.extend() mas corto

Te voy a hablar de forma muy sincera y directa. Espero que no te moleste, pero como ya te he contado es mi forma de hablar.


Lo que me estás contando es una locura. Así de claro. Veo tantos problemas en ello que no puedo decirlo de otra forma. Y ojo, que sé que muchos de los problemas que pueda decirte tú ya los sabrás y además tampoco podrás hacer nada por cambiarlo. Pero creo que es importante decirlo.

Te cuento por qué me parece una locura.


1. No eres la persona adecuada.
No te lo tomes mal, pero si tú mismo dices que tu Javascript es mediocre, claramente no pareces la persona más apropiada para montar toda una librería así.

Hombre, ya veo que te lo tomas en serio y tratas de aprender a marchas forzadas. Bien por ti, claro. Pero aún así no eres la persona apropiada para hacer una librería así.

2. No deberíais hacer una librería.
Sí, deberíais haber seguido con Ext, o con JQueryUI, o con ZK, o usar GWT o lo que sea, pero deberíais haber elegido usar una librería externa. Para esto hay muchas razones, pero algunas de ellas pueden ser:
- Nunca vas a hacer tú solo (y no porque seas tú sino porque eres 1) una librería tan completa como puedan hacerlo los X colaboradores que puedan tener cada una de las librerías comentadas.
- Tal como lo cuentas, parece que tú harás tu librería, la dejarás ahí y te irás/olvidarás de ella. Si esto es así, es absurdo pensar que puedes dejar la librería cerrada y que no hará falta ampliarla/modificarla, y cuando eso pase ¿quién lo hará? Si no es así y tú sigues, es igual, estás creando una dependencia total de la librería sobre una única persona.

3. No deberíais usar una librería para aislaros de Javascript.
Por lo que dices la idea es que el equipo de desarrollo no tenga que aprender nada de Javascript. Más aún, que cuando usen la librería puedan seguir "pensando en Java". Esto es malo. Es malo para ellos, porque no aprenden nada. Es malo para la empresa porque sus empleados no aprenden nada. Es malo para el proyecto, porque la librería se vuelve una caja negra y por debajo nadie del equipo de desarrollo sabe realmente lo que está pasando.

Usad una librería para facilitar el trabajo, pero no para que la gente no necesite saber qué está pasando.

4. No deberíais usar una librería en un lenguaje para hacer las cosas como se harían en otro lenguaje.
De esto ya hablamos el otro día. Diferentes lenguajes ofrecen diferentes formas de hacer las cosas. La forma de utilizar los diferentes lenguajes no es forzar a que el lenguaje encaje a martillazos en tu forma de hacer las cosas. La forma de utilizar un lenguaje es cambiar tu forma de hacer las cosas para que aproveche lo que ofrece ese lenguaje.

Es como si un leñador coge una motosierra y sin encenderla ni nada se pone a golpear un árbol como si lo hiciera con un hacha. Quizá al final corte el árbol, pero el esfuerzo que le costará será incluso mayor que cuando usaba el hacha.



Nota: Por todo lo que has contado, yo sugeriría utilizar Dojo o GWT. Diría que ZK también os iría bien, pero no conozco ZK suficiente como para recomendarlo.



Más a nivel técnico:

5. Te sigues empeñando en ver las cosas como se hacen en Java

- Te concentras en heredar. Heredar en JAvascript no tiene ni de lejos la mísma relevancia que puede tener en Java. En concreto en los problemas que cuentas, debería concentrarte en todo caso en clonar, no en heredar.

- Si obj es un objeto, entonces NO, no puedes hacer new obj. Los objetos en Javascript se crean de 2 modos: O bien copiando otro objeto, o bien desde una función generadora, un Constructor. De todos modos, esto es algo que tampoco puedes hacer en Java, así que no entiendo de dónde sacas la idea.

(Nota1): Hay otro modo, claro, el de crearlos a partir de un literal (var obj = { ... }), pero es trivial y no nos interesa ahora.

- Lo que te comentaba de alert(obj.Parm.waitinterval) no sé si lo has probado. Me refería a que en tu ejemplo pusieras esa línea exactamente al final:

Código javascript:
Ver original
  1. var ClaseA = {
  2.     Create:function(url,Parm){
  3.         url: '',
  4.         this.Parm = {
  5.             move: '10',
  6.             Default:'Convert',
  7.             Error: 'Ferror',
  8.             waitinterval:10
  9.         };
  10.         this.url = url;
  11.         this.Parm = Parm;
  12.     }
  13. }
  14.  
  15. var obj = new ClaseA.Create('localhost',{move:'20',Default:'NN'} );
  16. alert(obj.url);
  17. alert(obj.Parm.move);
  18. alert(obj.Parm.waitinterval); // undefined

Quizá lo que querías decir era:

Código javascript:
Ver original
  1. var ClaseA = {
  2.     Create:function(url,Parm){
  3.         this.Parm = {
  4.             move: '10',
  5.             Default:'Convert',
  6.             Error: 'Ferror',
  7.             waitinterval:10
  8.         };
  9.         this.url = url || "";
  10.         this.Parm = Object.extend(this.Parm,Parm);
  11.     }
  12. }
  13.  
  14. var obj = new ClaseA.Create('localhost',{move:'20',Default:'NN'} );
  15. alert(obj.url);
  16. alert(obj.Parm.move);
  17. alert(obj.Parm.waitinterval); // 10



PEro para no perdernos demasiado, volvamos un poco al tema original... ¿Qué es lo que necesitas de Object.extend() más que lo que tiene?:
Código javascript:
Ver original
  1. Object.extend = function(destination, source) {
  2.     for (var property in source) destination[property] = source[property];
  3.     return destination;
  4. };

Quiero decir, ¿qué es lo que intentas hacer con Object.extend() y que no te funciona?

Última edición por venkman; 04/03/2009 a las 12:17 Razón: Sugerencia de Dojo