Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/09/2013, 10:37
Nisrokh
 
Fecha de Ingreso: septiembre-2009
Ubicación: Neuquén
Mensajes: 142
Antigüedad: 15 años, 1 mes
Puntos: 12
Respuesta: POO - Herencia

Yo me siento bastante cómodo utilizando este simple script:

Código Javascript:
Ver original
  1. /**
  2.  * Simple JavaScript Inheritance
  3.  * Inspired by base2 and Prototype
  4.  * By John Resig http://ejohn.org/
  5.  * MIT Licensed.
  6.  */
  7. (function() {
  8.     var initializing = false,
  9.         fnTest = /xyz/.test(function(){xyz;})
  10.             ? /\b_super\b/
  11.             : /.*/;
  12.    
  13.     this.Class = function(){};
  14.    
  15.     Class.extend = function(prop)
  16.     {
  17.         var _super = this.prototype;
  18.        
  19.         initializing = true;
  20.         var prototype = new this();
  21.         initializing = false;
  22.        
  23.         for (var name in prop) {
  24.             prototype[name] = typeof prop[name] == "function"
  25.                 && typeof _super[name] == "function"
  26.                 && fnTest.test(prop[name])
  27.                 ? (function(name, fn) {
  28.                     return function() {
  29.                         var tmp = this._super;
  30.                         this._super = _super[name];
  31.                         var ret = fn.apply(this, arguments);       
  32.                         this._super = tmp;
  33.                        
  34.                         return ret;
  35.                     };
  36.                 })(name, prop[name])
  37.                 : prop[name];
  38.         }
  39.        
  40.         function Class() {
  41.             if ( !initializing && this.init )
  42.             this.init.apply(this, arguments);
  43.         }
  44.        
  45.         Class.prototype = prototype;
  46.         Class.prototype.constructor = Class;
  47.         Class.extend = arguments.callee;
  48.        
  49.         return Class;
  50.     };
  51. })();

La propiedad "init" es el utilizada como constructor. Ejemplos:
Código Javascript:
Ver original
  1. var Person = Class.extend({
  2.     init: function(isDancing){
  3.         this.dancing = isDancing;
  4.     },
  5.     dance: function(){
  6.         return this.dancing;
  7.     }
  8. });
  9.  
  10. var Ninja = Person.extend({
  11.     init: function(){
  12.         this._super( false );
  13.     },
  14.     dance: function(){
  15.         // Call the inherited version of dance()
  16.         return this._super();
  17.     },
  18.     swingSword: function(){
  19.         return true;
  20.     }
  21. });
  22.  
  23. var p = new Person(true);
  24. p.dance(); // => true
  25.  
  26. var n = new Ninja();
  27. n.dance(); // => false
  28. n.swingSword(); // => true
  29.  
  30. // Should all be true
  31. p instanceof Person && p instanceof Class &&
  32. n instanceof Ninja && n instanceof Person && n instanceof Class

Fuente: http://ejohn.org/blog/simple-javascript-inheritance/

Saludos.
__________________
Amigos de Foros del Web: seamos más solidarios. ¡No dejemos que un tema se valla al final de las páginas con 0 (cero) respuestas! ¡Gracias por su ayuda! :-)