2011-08-30 7 views
7

Estoy luchando con Javascript Herencia clásica1. Mientras, en el extremo Douglas Crockford, rechaza sus primeros intentos para apoyar modelo clásico en Javascript, me parece interesante para comprender:Javascript Parasitic Herencia

I have been writing JavaScript for 8 years now, and I have never once found need to use an uber function. The super idea is fairly important in the classical pattern, but it appears to be unnecessary in the prototypal and functional patterns. I now see my early attempts to support the classical model in JavaScript as a mistake.

Sin embargo, hay algo que no muy clara en lo que concierne Herencia parasitaria :

function ZParenizor2(value) { 
    var that = new Parenizor(value); 
    that.toString = function() { 
     if (this.getValue()) { 
     return this.uber('toString'); 
     } 
     return "-0-" 
    }; 
    return that; 
} 

ZParenizor, según lo que he entendido se define en términos de Parenizor. Pero Parenizor es la clase base y hereda de nadie. Así que la función this.uber no estará definida y de hecho tengo un error cuando llamo al método toString de un nuevo objeto ZParenizor2.

¿Estoy correcto o estoy ignorando algo?

ACTUALIZACIÓN Tenía razón. Este método solo funciona cuando crea ZParenizor con 0 como parámetro, ya que no necesita llamar al método uber (como puede ver en la implementación del método).

Cuando intenta con un parámetro diferente, me sale este error:

Uncaught TypeError: Object #<error> has no method 'uber' 
+1

Todos los objetos heredan al menos de 'Object.prototype' ... –

+1

Bien, ¿qué dice el error? –

+0

Sí. El error no se debió a lo que yo pensé, sino a un error tipográfico. Sin embargo, no he pensado en el hecho de que todos los objetos heredan de las Funciones que son objetos. ¡Gracias! – user278064

Respuesta

2

Puede modificar el prototipo de Parenizor tener una función súper y funcionará con cualquier otro valor.

+0

Tiene razón. Pero el hecho de que el autor haya decidido dar una función súper solo a esos objetos heredados, ma ke me piensas – user278064

+0

Sí, en ese contexto parece completamente inútil, sin embargo, eso solo dependería de qué uso se le da al objeto "heredado" – Chiguireitor

Cuestiones relacionadas