hace tiempo habia encontrado el siguiente codigo:
Código Javascript:
Ver original
var Class = function(class1,class2){ var object = class2 ? class2 : class1; var superclass = class2 ? class1.prototype : {}; for(var prop in superclass){ if(typeof object[prop] == 'undefined') object[prop] = superclass[prop]; else if(typeof superclass[prop] == 'function'){ object[prop] = (function(funct){ var bfunct = function(){ this.parent = bfunct.parent; return funct.apply(this, arguments); } return bfunct; })(object[prop]); object[prop].parent = superclass[prop]; } } var _class = function(){ if(this.initialize) this.initialize.apply(this,arguments); } _class.prototype = object; _class.constructor = Class; return _class; }
(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
var Class = function(class1,class2){ var object = class2 ? class2 : class1; var superclass = class2 ? class1.prototype : {}; for(var prop in superclass){ if(typeof object[prop] == 'undefined') object[prop] = superclass[prop]; else if(typeof superclass[prop] == 'function'){ object[prop] = (function(funct){ var bfunct = function(){ this.parent = bfunct.parent; this.Super = function () { this.parent.apply(object,arguments) } return funct.apply(this, arguments); } return bfunct; })(object[prop]); object[prop].parent = superclass[prop]; } } var _class = function(){ if(this.initialize) this.initialize.apply(this,arguments); } _class.prototype = object; _class.constructor = Class; return _class; }
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
var clase1 = new Class({ initialize:function () { alert("clase 1") } }) var clase2 = new Class(clase1,{ initialize:function () { this.Super() alert("clase 2") } }) var test = new clase2() // resulado: alert("clase 1"); alert("clase 2")