In "JavaScript: The Good Parts" di Douglas Crockford, passa attraverso tre tipi di eredità: classica, prototipale e funzionale. Nella parte sull'ereditarietà funzionale scrive:
"The functional pattern also gives us a way to deal with super methods."
Quindi continua a implementare un metodo denominato "superiore" su tutti gli oggetti. Tuttavia, nel modo in cui usa il metodo superiore, sembra proprio che stia copiando il metodo sull'oggetto super per un uso successivo:
// crockford's code:
var coolcat = function(spec) {
var that = cat(spec),
super_get_name = that.superior('get_name');
that.get_name = function (n) {
return 'like ' + super_get_name() + ' baby';
};
return that;
};
Il metodo originale get_name
è copiato in super_get_name
. Non capisco cosa c'è di così speciale nell'ereditarietà funzionale che lo renda possibile. Non puoi farlo con l'ereditarietà classica o prototipale? Qual è la differenza tra il codice sopra e il codice qui sotto:
var CoolCat = function(name) {
this.name = name;
}
CoolCat.prototype = new Cat();
CoolCat.prototype.super_get_name = CoolCat.prototype.get_name;
CoolCat.prototype.get_name = function (n) {
return 'like ' + this.super_get_name() + ' baby';
};
Questo secondo esempio non fornisce l'accesso anche ai "metodi super"?