tutorial javascript prototype

javascript - tutorial - Class.prototype.method vs this.prototype.method



prototype jquery (3)

  1. ¿Existe este prototipo?

    No. Pero, este this.constructor.prototype debería.

  2. ¿Es lo mismo que la clase (.constructor) .prototipo?

    En general, tendrá el mismo valor (siempre que this.constructor === Class ), pero no la misma intención.

  3. ¿Qué pasa con la herencia?

    Cada new Class instancia de new Class heredará de Class.prototype . Por lo tanto, un objeto prototype es bueno para definir valores compartidos accesibles para todas las instancias. Luego, el constructor solo tiene que configurar el estado que es único para cada instancia.

    Sin embargo, intentar mezclar el 2 y establecer una propiedad prototype dentro del constructor tiene algunos problemas, incluido un conflicto de gallina o huevo ya que el método no existirá hasta que se cree la primera instancia:

    function Class() { this.constructor.prototype.method = function () {}; } console.log(typeof Class.prototype.method); // "undefined" var a = new Class(); console.log(typeof Class.prototype.method); // "function"

    Y elimina algunos de los beneficios de tener el prototype ya que el método se recrea con cada instancia adicional:

    var method = a.method; console.log(a.method === method); // true var b = new Class(); console.log(a.method === method); // false

Siempre he visto ejemplos de Class.prototype.method, pero nunca instancias de this.prototype.method. Por ejemplo:

function Class() { this.prototype.method = function() { alert("is this allowed?"); }; }

vs

function Class() {} Class.prototype.method = function() { alert("traditional example"); };

  1. ¿Existe este prototipo?
  2. ¿Es lo mismo que Class.prototype?
  3. ¿Qué pasa con la herencia?

this.prototype se referiría a esa instancia del objeto de clase. No te daría mucho beneficio por el alcance.

Class.prototype agrega funcionalidad a la Clase, no a la instancia de la misma.


Class es una función; this es un objeto Las funciones tienen una propiedad prototype ; los objetos no lo hacen. Hay una propiedad __proto__ definida en los objetos, pero esa interfaz está en desuso. Puedes hacer algo como

function Class () { var prototype = Object.getPrototypeOf(this); prototype.method = function () {}; }

dentro de su constructor, pero no es realmente una buena práctica: cada vez que se crea una instancia de la Class , se perderá innecesariamente el method sobrescritura de los ciclos en el prototipo, y en casos con código más complejo, también se puede perder la memoria.

En resumen, no hay inconvenientes al revés y posiblemente graves para hacerlo de esa manera.