Ver Mensaje Individual
  #4 (permalink)  
Antiguo 07/09/2013, 19:28
opzina
 
Fecha de Ingreso: marzo-2008
Mensajes: 1.020
Antigüedad: 16 años, 8 meses
Puntos: 21
Respuesta: POO - Herencia

Muchas Gracias por responder.

Cita:
Iniciado por Aijoona Ver Mensaje
Por que necesitarias otra forma/manera?
Porque quiero tratar de ordenar el código JS, tener una mejor opción o alternativa ya probada y evitar usar alguna librería como Backbonejs. Por lo menos de momento.

-----------------------------

Acá les dejo unos cambios que hice sin utilizar métodos como los que plantea "Nisrokh". No se cuáles son las limitaciones de momento.

Ver princcipalmente la clase "Triangulo".

Código:

Código Javascript:
Ver original
  1. var Figura = (function(win, doc, undefined) {
  2.     'use strict'
  3.    
  4.     var Figura = function(base, altura) {
  5.         this.base = base;
  6.         this.altura = altura;
  7.     }
  8.  
  9.    
  10.     Figura.prototype = {
  11.            
  12.         constructor : Figura,
  13.        
  14.         area : function() {
  15.             return this.base * this.altura;
  16.         },
  17.        
  18.         perimetro : function() {
  19.             return ( (this.base * 2) + (this.altura * 2) );
  20.         }
  21.     };
  22.    
  23.     // Private
  24.     var _perimetro = function(context) {
  25.         return 'Perímetro';
  26.     };
  27.    
  28.     return Figura;
  29.    
  30. })(window, document);
  31.  
  32.  
  33. // Herencia, Polimorfismo y Sobrescritura -> ¿Cómo?
  34. // class Circulo extends Figura {}; -> Java, PHP, etc.
  35.  
  36. var Circulo = (function(win, doc, undefined) {
  37.     'use strict'
  38.    
  39.     var Circulo = function(radio) {
  40.         this.radio = radio;
  41.     }
  42.    
  43.     Circulo.prototype = {
  44.         constructor : Circulo,
  45.        
  46.         area : function() {
  47.             return ( Math.pow( (Math.PI * this.radio), 2) );
  48.         }
  49.     };
  50.    
  51.     return Circulo;
  52.    
  53. })(window, document);
  54.  
  55.  
  56. // Herencia
  57. Circulo.prototype = new Figura(40, 80);
  58. var circulito = new Circulo(5);
  59.  
  60.  
  61.  
  62. // Triangulo
  63. var Triangulo = (function(win, doc, undefined) {
  64.     'use strict'
  65.    
  66.     // Private Properties
  67.     var name = "";
  68.    
  69.     // Constructor
  70.     var Triangulo = function(base, altura, angulo, fname) {
  71.         Figura.call(this, base, altura);
  72.        
  73.         // Set Private Property
  74.         name = fname;
  75.        
  76.         // Set Public Property
  77.         this.angulo = angulo;
  78.        
  79.         // Setters and Getters
  80.         this.getName = function() {
  81.             return name;
  82.         }
  83.        
  84.         // Public Methods
  85.         this.getAngulo = function() {
  86.             return this.angulo;
  87.         };
  88.        
  89.         // Sobreescritura ? - check
  90.         // Si no esta este método se utiliza el de Figura
  91.         this.area = function() {
  92.             return ( (this.base * this.altura) / 2);
  93.         },
  94.        
  95.         // Polimorfismo ? - check
  96.         /*this.area = function(base, altura) {
  97.             return ( (base * altura) / 2);
  98.         },*/
  99.        
  100.         this.doSomething = function() {
  101.             return _doSomethingFine();
  102.         }
  103.        
  104.     }
  105.    
  106.     // Private Methods
  107.    
  108.     var _doSomethingFine = function() {
  109.         return 'Do something Fine';
  110.     }
  111.    
  112.     return Triangulo;
  113.    
  114. })(window, document);
  115.  
  116. // Herencia
  117. Triangulo.prototype = new Figura();
  118. var triangulo = new Triangulo(5, 8, 45, 'Nombre Completo');
  119. console.log(triangulo)
  120. console.log('Triangulo - Something => ', triangulo.doSomething());
  121. console.log('Triangulo - Área   => ', triangulo.area());
  122. console.log('Nombre-> ', triangulo.getName());
__________________
_