Foros del Web » Programando para Internet » Javascript »

Eliminar prototypes

Estas en el tema de Eliminar prototypes en el foro de Javascript en Foros del Web. Hola a todos Tengo una duda alguien sabe como se puede eliminar un prototype de una objeto en javascript, ya que cuando voy a utilizar ...
  #1 (permalink)  
Antiguo 15/02/2010, 10:15
 
Fecha de Ingreso: febrero-2010
Mensajes: 17
Antigüedad: 14 años, 9 meses
Puntos: 0
Eliminar prototypes

Hola a todos

Tengo una duda alguien sabe como se puede eliminar un prototype de una objeto en javascript, ya que cuando voy a utilizar un array por ejemplo todos estos prototypes pasan al objeto y me toca filtrarlos pero ahora he llegado a una caso donde necesito es eliminarlos, he probado con varias formas y hasta el momento no me ha dado resultado ninguna, soy nuevo en el Foro y busque el tema y no lo encontre, si esta me dusculpan porfa y me cuentan, si no les agradezco su colaboracion.

ej:

Código Javascript:
Ver original
  1. // indexOf: devuelve la posición del primer elemento que coincida con el parámetro
  2. Array.prototype.indexOf = function(elemento) {
  3. var retorno = -1;
  4. for(var i=0;i<this.length;i++)
  5. if(this[i] == elemento)
  6. {
  7. retorno = i;
  8. break;
  9. }

si Yo trato de eliminar este prototype de mi Array, el sigue alli, osea no se elimina


Saludos.

Última edición por jagz; 15/02/2010 a las 11:18 Razón: ejemplo
  #2 (permalink)  
Antiguo 15/02/2010, 10:48
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 15 años
Puntos: 65
Respuesta: Eliminar prototypes

Tenes algo asi

Código Javascript:
Ver original
  1. function algo(param){
  2.  
  3.     this.algo = param;
  4.  
  5. }
  6.  
  7. algo.prototype.miFunc = function(){
  8.  
  9.     alert(this.algo);
  10.  
  11. }
  12.  
  13. // Si es asi, para borrarlo:
  14.  
  15. algo.miFunc = null;
  16.  
  17. alert(algo.miFunc);
__________________
HV Studio
Diseño y desarrollo web
  #3 (permalink)  
Antiguo 15/02/2010, 11:40
 
Fecha de Ingreso: febrero-2010
Mensajes: 17
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Eliminar prototypes

Cita:
Iniciado por jackson666 Ver Mensaje
Tenes algo asi

Código Javascript:
Ver original
  1. function algo(param){
  2.  
  3.     this.algo = param;
  4.  
  5. }
  6.  
  7. algo.prototype.miFunc = function(){
  8.  
  9.     alert(this.algo);
  10.  
  11. }
  12.  
  13. // Si es asi, para borrarlo:
  14.  
  15. algo.miFunc = null;
  16.  
  17. alert(algo.miFunc);
Hola jackson666

si hago esto para el ejemplo que te pongo si verificas no lo elimina del array, si sabes algo mas te agradezco.

Saludos
  #4 (permalink)  
Antiguo 15/02/2010, 12:12
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 15 años
Puntos: 65
Respuesta: Eliminar prototypes

Código Javascript:
Ver original
  1. var algo = function (param){
  2.  
  3.     this.algo = param;
  4.  
  5. }
  6.  
  7. algo.prototype.miFunc = function(){
  8.  
  9.     alert(this.algo);
  10.  
  11. }
  12.  
  13. // Si es asi, para borrarlo:
  14.  
  15. algo = null;
  16.  
  17. alert(algo);
__________________
HV Studio
Diseño y desarrollo web
  #5 (permalink)  
Antiguo 15/02/2010, 14:09
 
Fecha de Ingreso: febrero-2010
Mensajes: 17
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Eliminar prototypes

Cita:
Iniciado por jackson666 Ver Mensaje
Código Javascript:
Ver original
  1. var algo = function (param){
  2.  
  3.     this.algo = param;
  4.  
  5. }
  6.  
  7. algo.prototype.miFunc = function(){
  8.  
  9.     alert(this.algo);
  10.  
  11. }
  12.  
  13. // Si es asi, para borrarlo:
  14.  
  15. algo = null;
  16.  
  17. alert(algo);
Código Javascript:
Ver original
  1. Array.prototype.indexOf = function(elemento) {
  2.     var retorno = -1;
  3.     for(var i=0;i<this.length;i++)
  4.     if(this[i] == elemento){
  5.     retorno = i;
  6.     break;
  7.     }
  8. }
  9.  
  10. var ar = Array('jj','fg','fs');
  11.  
  12.  
  13. ar.indexOf = null;
  14.  
  15.  
  16. for (var p in ar){
  17.      alert('p:'+p+' -->'+ar[p])
  18. }

La posicion indexOf como tal sigue existiendo dentro del array necesito es aparte de eliminar el prototye que se elimine la posiscion ubicada de este en el ojceto tipo array.

Última edición por jagz; 15/02/2010 a las 15:04 Razón: modificacion respuesta
  #6 (permalink)  
Antiguo 15/02/2010, 21:41
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Eliminar prototypes

he tenido que releer y releer porque la verdad no lo estaba entendiendo, espero haber entendido bien el asunto. primero creo que deberias de leer acerca de como javascript busca los identificadores (identificadores son los nombres asignados a propiedades, funciones y variable), para tu caso, en un objeto. basicamente cuando intentas leer una propiedad, javascript primero busca si dicha propiedad existe explicitamente en dicho objeto. si no existe, javascript busca en la cadena de herencias comenzando por el prototype del constructor del objeto y continua por el resto de la cedena.

la razon por la que indexOf te sigue apareciendo cuando recorres el objeto con for/in es porque estas creando la propiedad indexOf con el valor null. entiendase que asignar un valor que literalmente no tiene un valor (como null y undefined, aunque ambos son distintos) no elimina explicitamente la propiedad sino que la sobreescribe con un nuevo valor o la crea. en tu caso, estas creando una propiedad explicitamente para el objeto. entonces, ¿como se elimina la funcion del objeto? para ello tenemos que usar el operador delete operand.
Código:
// para este ejemplo usare una funcion vacia con un nombre distinto porque;
// algunas implementaciones de javascript definen la funcion indexOf para arrays;
Array.prototype.myFunc = function(){ /*cuerpo vacio*/ };
var array = []; // se crea el array;
array.myFunc = undefined; // se crea la propiedad myFunc explicitamente en el objeto;
alert(array.myFunc); // muestra undefined, pues en la expresion anterior se ha creado dicha propiedad con ese valor;
delete array.myFunc; // se elimina la propiedad myFunc;
alert(array.myFunc); // muestra la funcion del prototipo Array porque en el objeto no existe dicha propiedad;
delete Array.prototype.myFunc; // se elimina la funcion desde el prototipo;
alert(array.myFunc); // muestra undefined porque no existe dicha propiedad en el objeto array ni en el prototipo del constructor;
ahora bien, entiendase que eliminar la funcion desde el prototipo afecta a todos los objetos creados. si lo que te interesa es eliminar la funcion solamente para algunos objetos en particular, entonces debes crear una propiedad con el mismo nombre y un valor distinto como undefined o null. en ese caso, javascript no alcanza a la funcion definida en el prototipo porque en el objeto existe una propiedad, independientemente del valor.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 16/02/2010, 08:37
 
Fecha de Ingreso: febrero-2010
Mensajes: 17
Antigüedad: 14 años, 9 meses
Puntos: 0
De acuerdo Respuesta: Eliminar prototypes

Hola zerokilled efectivamente era esta mi duda a resolver y creo que es clara la respuesta, muhcas gracias.

Etiquetas: eliminar
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 11:45.