Foros del Web » Programando para Internet » Javascript »

Class

Estas en el tema de Class en el foro de Javascript en Foros del Web. Hola, hace tiempo habia encontrado el siguiente codigo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original var Class = function ( class1 , class2 ) { ...
  #1 (permalink)  
Antiguo 11/05/2012, 15:15
Avatar de ClubIce  
Fecha de Ingreso: diciembre-2008
Mensajes: 216
Antigüedad: 15 años, 3 meses
Puntos: 2
Class

Hola,

hace tiempo habia encontrado el siguiente codigo:

Código Javascript:
Ver original
  1. var Class = function(class1,class2){
  2.     var object = class2 ? class2 : class1;
  3.   var superclass = class2 ? class1.prototype : {};
  4.   for(var prop in superclass){
  5.     if(typeof object[prop] == 'undefined') object[prop] = superclass[prop];
  6.     else if(typeof superclass[prop] == 'function'){
  7.       object[prop] = (function(funct){
  8.         var bfunct = function(){
  9.         this.parent = bfunct.parent;
  10.         return funct.apply(this, arguments);
  11.         }
  12.         return bfunct;
  13.       })(object[prop]);
  14.       object[prop].parent = superclass[prop];
  15.     }
  16.   }
  17.   var _class = function(){
  18.     if(this.initialize) this.initialize.apply(this,arguments);
  19.   }
  20.   _class.prototype = object;
  21.   _class.constructor = Class;
  22.   return _class;
  23. }

(tiene alguna modificaciones hechas por mi)

lo que hace esto es crear el constructor de las Clases que necesite, esta funcion me permite llamar a la funcion madre de determinada funcion mediante this.parent.call(this, argumentos)

lo que yo busco es simplificar esta linea a algo como esto:

this.Super(argumentos)

pero no he logrado lo que busco ya que no entiendo al 100% como funciona ese codigo.

EDITO:

Despues de analizar el codigo un poco mas, descubri como lograr lo que necesito:

Código Javascript:
Ver original
  1. var Class = function(class1,class2){
  2.     var object = class2 ? class2 : class1;
  3.   var superclass = class2 ? class1.prototype : {};
  4.   for(var prop in superclass){
  5.     if(typeof object[prop] == 'undefined') object[prop] = superclass[prop];
  6.     else if(typeof superclass[prop] == 'function'){
  7.       object[prop] = (function(funct){
  8.         var bfunct = function(){
  9.         this.parent = bfunct.parent;
  10.         this.Super = function () {
  11.             this.parent.apply(object,arguments)
  12.         }
  13.         return funct.apply(this, arguments);
  14.         }
  15.         return bfunct;
  16.       })(object[prop]);
  17.       object[prop].parent = superclass[prop];
  18.     }
  19.   }
  20.   var _class = function(){
  21.     if(this.initialize) this.initialize.apply(this,arguments);
  22.   }
  23.   _class.prototype = object;
  24.   _class.constructor = Class;
  25.   return _class;
  26. }

Aqui les dejo como funciona para quien le sea util, es bastante sencillo de usar:

Metodo 1:
class1 = objeto

Nos crea la funcion contructora para crear clases basadas en class1

Metodo 2:
class1 = superclase
class2 = objeto;

Crea una super clase de class1 añadiendo la modificaciones hechas class2, y devuelve la funcion constructora final.
Ademas, nos permite usar el metodo Super que nos permite llamar a la misma funcion ubicada en la super clase

ejemplo:

Código Javascript:
Ver original
  1. var clase1 = new Class({
  2.   initialize:function () {
  3.     alert("clase 1")
  4.   }
  5. })
  6.  
  7. var clase2 = new Class(clase1,{
  8.   initialize:function () {
  9.     this.Super()
  10.     alert("clase 2")
  11.   }
  12. })
  13.  
  14. var test = new clase2()
  15.  
  16. // resulado: alert("clase 1"); alert("clase 2")

Última edición por ClubIce; 11/05/2012 a las 15:53

Etiquetas: class, funcion
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:34.