2011-08-30 11 views
7

Sono in difficoltà con Javascript Ereditarietà classica1. Mentre, alla fine Douglas Crockford, respinge i suoi primi tentativi di sostenere modello classico in Javascript, trovo interessante capire:Ereditarietà parassita Javascript

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.

Tuttavia, c'è qualcosa che non molto chiaro per quanto riguarda Parassita Inheritance :

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

ZParenizor, per quanto ho capito è definito in termini di Parenizor. Ma Parenizor è la classe base e non eredita da nessuno. Quindi la funzione this.uber non verrà definita e in effetti ho un errore quando chiamo il metodo toString di un nuovo oggetto ZParenizor2.

Sono corretto o sto ignorando qualcosa?

UPDATE Avevo ragione. Questo metodo funziona solo quando si crea ZParenizor con 0 come parametro, poiché non è necessario chiamare il metodo uber (come si può vedere dall'implementazione del metodo).

Quando si tenta con un parametro diverso, ottengo questo errore:

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

Tutti gli oggetti ereditano almeno da 'Object.prototype' ... –

+1

Bene, cosa dice l'errore? –

+0

Sì. L'errore non era dovuto a quello che pensavo, ma a un refuso. Comunque non ho pensato al fatto che tutti gli oggetti ereditino da Funzioni che sono oggetti. Grazie! – user278064

risposta

2

È possibile modificare il prototipo di Parenizor ad avere una funzione uber e funzionerà con qualsiasi altro valore.

+0

Hai ragione, ma il fatto che l'autore abbia deciso di assegnare una funzione uber solo a quelli che ereditano oggetti, ma mi credi. – user278064

+0

Sì, in quel contesto sembra completamente inutile, tuttavia ciò dipenderebbe solo dall'uso che viene dato all'oggetto "ereditario" – Chiguireitor

Problemi correlati