2012-08-30 22 views
5

ejecute el siguiente fragmento de código y ver lo que está sucediendo en JS consola:Cómo volver a definir un método en un "javascript clase"

Mis preguntas son con respecto a la última línea en el fragmento:

  1. ¿Por qué ha cambiado F.prototype.method;?
  2. ¿Cómo debo redefinir Fcustom.prototype.method para no cambiar F.prototype.method?

Nota: Estoy usando jQuery y guión bajo para extender la función.


  • Código de ensayo fragmento:

    var F = function() {}; 
    F.prototype.method = function() { 
        // some code 
    } 
    
    F.prototype.method; // it shows "some code" 
    
    
    Fcustom = $.extend(true, F, {}); 
    
    _.extend(Fcustom.prototype, { 
    method: function() { 
        // other code 
        } 
    }); 
    
    Fcustom.prototype.method; // it shows "other code" 
    
    F.prototype.method; // it shows "other code" instead of "some code" Why? 
    
+1

¿Desea copiar la función 'F' a' Fcustom'? – pimvdb

+0

Desafortunadamente no puedes clonar funciones ... –

Respuesta

3
var obj = { myMethod : function() { 
       //some code 
      } 
}; 

var newObj = $.extend(true, {}, obj); 

newObj.myMethod = function(){  
    //new method 
}; 

newObj.myMethod(); //should call the new method 

Mientras,

obj.myMethod(); //still calls the old "//some code" 

DEMO:

+0

Creo que quisiste cambiar los argumentos a '$ .extend'. – pimvdb

+0

@pimvdb: En resumen. Sí. Pero pensó que sería mejor demostrar que el ** primer argumento es el objetivo del cambio **. Mientras que el original permanece intacto. Todo sin alterar directamente el 'prototipo'. –

+0

Entiendo, pero me temo que su último comentario del primer fragmento no es correcto. – pimvdb

Cuestiones relacionadas