2012-04-14 5 views
6

Antes que nada, lo siento si esta es una pregunta estúpida. He escrito dos fragmentos de código a continuación. El primer fragmento de código encontrado desde here escrito por John Resig e indudablemente es uno de los mejores y el segundo fragmento de código es modificado por mí desde el código original solo para entender la diferencia, pero no estoy seguro cuál es la diferencia entre ambos y qué Puedo y no puedo hacer con ambos comparativamente. Por favor, alguien me ayude a entender la diferencia. Gracias.Opp Javascript e instanciación de clase simple

function makeClass(){ 
     return function(args){ 
      if (this instanceof arguments.callee) { 
       if (typeof this.init == "function") 
        this.init.apply(this, args.callee ? args : arguments); 
       } 
       else return new arguments.callee(arguments); 
     }; 
    } 
    var User = makeClass(); 
    User.prototype.init = function(first, last){ 
     this.name = first + " " + last; 
    }; 
    var user = User("John", "Resig"); 
    console.log(user); 

versión modificada

function myClass(args) 
    { 
     if (this instanceof arguments.callee) 
     { 
      this.init = function(first, last){ 
       this.name = first + " " + last; 
      }; 
      this.init.apply(this, args.callee ? args : arguments); 
     } 
     else return new arguments.callee(arguments); 
    } 
    var obj = new myClass('Sheikh', 'Heera'); 
      console.log(obj); 

Por qué debería usar prototipo del objeto para agregar un método (después de hacer un ejemplo) en lugar de escribirlo dentro del constructor?

Respuesta

7

Una razón principal para definir un método de prototipo del objeto en lugar de en el constructor es que el método definido en el prototipo es inmediatamente disponible para y compartida por (en la memoria) todas las instancias del objeto.

Al definir el método en el constructor, ese método es específico para la instancia del objeto que lo crea. Si insiste en 10 de su objeto, tendrá 10 copias del método en la memoria, aunque sean todas iguales, hasta que modifique una de ellas.

Para que quede claro, por compartida entre las instancias de objeto, no quiero decir que el método opera estáticamente en las propiedades a las que accede. Esas propiedades (si se definen con this.) siguen siendo específicas de la instancia. Es solo que no terminas definiendo copias múltiples del mismo método.

Cuestiones relacionadas