Foros del Web » Programando para Internet » Javascript »

usar la palabra "Object" como identificador de una función

Estas en el tema de usar la palabra "Object" como identificador de una función en el foro de Javascript en Foros del Web. ¿que pasa internamente con el objeto Object() cuando uso como identificador de una función constructora la palabra Object? @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original ...
  #1 (permalink)  
Antiguo 13/09/2012, 23:41
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 13 años, 5 meses
Puntos: 269
usar la palabra "Object" como identificador de una función

¿que pasa internamente con el objeto Object() cuando uso como identificador de una función constructora la palabra Object?

Código Javascript:
Ver original
  1. function Object(){
  2.     this.propiedad = "valor";
  3. }
  4. var a = new Object();
  5. console.log(a.hasOwnProperty("propiedad")); //true
  6. console.log(a.propiedad);                   //"valor"
Gracias.
Saludos.
  #2 (permalink)  
Antiguo 14/09/2012, 12:27
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 14 años, 4 meses
Puntos: 1532
Respuesta: usar la palabra "Object" como identificador de una función

no estoy muy empapado en el tema, pero en lenguajes de herencia simple la clase base de TODAS las clases es Object, pero no sé si esto aplique en JS, al menos el mismo debe de manejar un tipo de objeto básico y el cual es reservado, por ejemplo en C# no puedo redefinir Object(), consulta sobre POO en JS
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 14/09/2012, 12:38
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 11 años, 6 meses
Puntos: 343
Respuesta: usar la palabra "Object" como identificador de una función

No redefine el objeto Object, simplemente crea una variable del mismo nombre en el scope actual.

Es decir, el constructor propio poco y nada tiene que ver con el Object nativo, y aún cuando esté no esté disponible de manera directa, puede ser accedido de diversas maneras.

Ej:
Código Javascript:
Ver original
  1. ({}).constructor;  // equivalente a Objec
  2. (new function() {}).__proto__.constructor // equivalente a Object
__________________
blog | @aijoona

Última edición por Aijoona; 14/09/2012 a las 12:53
  #4 (permalink)  
Antiguo 14/09/2012, 17:31
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 13 años, 5 meses
Puntos: 269
Respuesta: usar la palabra "Object" como identificador de una función

Muchas gracias.
Entonces si las funciones constructoras no sobrescriben los objetos nativos, ¿porque sucede esto?
Código Javascript:
Ver original
  1. function Array(){}
  2. function Date(){}
  3. function String(){}
  4.  
  5. var array = new Array(2, "hola", true, 45.34);
  6. var string= new String("string");
  7. var date  = new Date();
  8.  
  9. console.log(array[0]);      //undefined
  10. console.log(string);        //>String pero no del tipo primitivo
  11. console.log(date.getDay()); //>Uncaught TypeError: Object #<Date> has no method 'getDay'
  #5 (permalink)  
Antiguo 14/09/2012, 17:52
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 11 años, 6 meses
Puntos: 343
Respuesta: usar la palabra "Object" como identificador de una función

Porque estás sobreescribiendo la referencia a los constructores EN ESE SCOPE.

Es básicamente como funciona el scoping, eso te va a suceder con cualquier tipo de variables.

Vos defínis una función Array, que no sobreescribe el objeto nativo, pero si te 'opaca' el acceso al mismo.

http://en.wikipedia.org/wiki/Variable_shadowing

Eventualmente podes opacar todas las referencias a un objeto, pasando éste a ser víctima del Garbage Collector, pero no es el caso con los objetos nativos.

PD: En tu ejemplo podes instanciar implicitamente un array con la construcción [], fijate que sigue siendo un array nativo.
__________________
blog | @aijoona
  #6 (permalink)  
Antiguo 15/09/2012, 18:04
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 13 años, 5 meses
Puntos: 269
Respuesta: usar la palabra "Object" como identificador de una función

muchas gracias aijoona.
  #7 (permalink)  
Antiguo 16/09/2012, 11:22
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 11 años, 6 meses
Puntos: 343
Respuesta: usar la palabra "Object" como identificador de una función

Disculpa por la intromisión... Pero ¿Qué estás queriendo hacer?
__________________
blog | @aijoona
  #8 (permalink)  
Antiguo 16/09/2012, 16:54
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 13 años, 5 meses
Puntos: 269
Respuesta: usar la palabra "Object" como identificador de una función

No hay que disculpar, solo estoy siguiendo otro curso más de javascript y con cada lección me lleno de dudas que quedan dando vueltas en mi cabeza y me mata la intriga y la curiosidad ja.
Leí y practiqué el tema de scope y closures, me queda claro esto de las funciones como ciudadanos de primera clase. Se que en el browser, window es el scope global y como estoy recién abriéndome camino no sabía si se podía reescribir los objetos nativos desde un método de window, algo sin sentido, pero que daba vueltas en mis tripas.

Ahora estoy haciendo un "modelo" básico para una heladería, yo trabajo en una heladería, en donde pongo en práctica herencia prototípica y closures entre otros conceptos sobre poo que estoy aprendiendo en el curso. Con el fin de llevar un registro de los movimientos del negocio y calcular entre otras cosas las ganancias y gastos por mes. Algo pequeño pero que me ayude a no tener tan despelotado mis numeros y a aprender javascript al mismo tiempo. Pero bueno, esta duda en particular no se relaciona con dicha práctica, que seguro me traerá otras preguntas para hacer en el foro :D

Muchas gracias aijoona, la verdad me es de muchísima ayuda contar con tus respuestas. También pasé por tu blog, está muy bueno, ya leí algunos posts, como el de la conferencia JS, que me enteré por tu blog y me quiero matar, espero estar más prendido de twitter, me gustan ese tipo de eventos. Felicitaciones.

Última edición por cristian_cena; 16/09/2012 a las 17:05 Razón: explayarme un poquito más
  #9 (permalink)  
Antiguo 16/09/2012, 18:25
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 11 años, 6 meses
Puntos: 343
Respuesta: usar la palabra "Object" como identificador de una función

Si bien puede ser un poco 'básico', te recomendaría leer el libro "Eloquent JavaScript", que además de ser excelente, es gratuito:

http://eloquentjavascript.net/

De cualquier manera, las partes complicadas de JavaScript se reducen a la coerción de datos, los closures y luego algunas cosas más nuevas y complejas.
El resto es bastante sencillo, más teniendo en cuenta que JavaScript es un lenguaje muy pequeño (más si lo comparás con PHP por ejemplo).

PD: Eventos proximos, tenes la Ruby Conf y el BarCamp (supongo que será por octubre o noviembre).
__________________
blog | @aijoona
  #10 (permalink)  
Antiguo 16/09/2012, 22:59
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 13 años, 5 meses
Puntos: 269
Respuesta: usar la palabra "Object" como identificador de una función

Gracias, woau esa consola! anduve chusmeando codeacademy y me gusta la dinámica, parece que será divertido leer ese libro!

Etiquetas: identificador, object, palabra, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:44.