funciones - ¿Es correcto asignar el objeto prototipo de JavaScript en lugar de solo sus propiedades?
objeto window javascript ejemplos (2)
Creo que hay otro inconveniente de usar la forma de "asignación" a la propiedad prototype
: es probable que prototype.__proto__
propiedad prototype.__proto__
(cadena de prototipo) cuando se trata de la herencia "pseudo-clásica".
Por supuesto, uno podría argumentar que hay una manera sospechosa de remediar esto, que es adjuntar la propiedad __proto__
para conectar la cadena nuevamente. Pero si olvida hacer esto, romperá el código si llama al método principal. Vea mi violín aquí: http://jsfiddle.net/glenn/v5Yub/
Conclusión: el formulario de "asignación" puede parecer más simple / limpio, pero el formulario de "propiedad" es más seguro.
En JavaScript podemos asignar propiedades al prototipo de una función o establecer su objeto prototipo directamente:
var MyClass = function() { };
// The "property" form...
MyClass.prototype.foo = function() { ... };
MyClass.prototype.bar = function() { ... };
MyClass.prototype.gah = function() { ... };
// OR the "assignment" form...
MyClass.prototype = {
foo:function() { ... },
bar:function() { ... },
gah:function() { ... }
};
Personalmente prefiero la forma de asignación porque puede envolver fácilmente el objeto en un cierre (por ejemplo, para ocultar objetos "privados") y si más tarde decide cambiar el nombre de "MyClass" solo tiene que encontrar dos lugares en lugar de potencialmente docenas (Por supuesto, lo mismo podría decirse de la forma de "propiedad" utilizando y llamando a una función que toma el prototipo existente como un argumento, pero la forma de "asignación" parece más directa en mi opinión).
¿Hay una razón fuerte para usar una forma en lugar de la otra?
[Editar]
Como menciona el comentarista @Raynos, la segunda forma (asignación) codifica el atributo prototype.constructor
, que se debe establecer en la función MyClass (y está predeterminada en la primera forma [propiedad]). ¿Hay algún inconveniente real en esto (aparte del hecho de que la propiedad no está establecida)?
La razón principal para no usar la segunda forma es que terminará eliminando cualquier otra cosa que haya en el prototipo antes de asignarlo. Si eso no es algo que te preocupa, no hay razón para no declararlo de la manera que lo has demostrado.