Ho letto dei diversi modi di eseguire OOP in JS.Comprensione dell'implementazione OOP in classe di Crockford
Dave Crockford ha un approccio interessante in cui non sembra affatto utilizzare la delega. Invece, a me sembra che utilizzi puramente la concatenazione degli oggetti come meccanismo ereditario, ma è piuttosto difficile per me dire cosa sta succedendo e spero che qualcuno possa aiutare.
Ecco un esempio che crockford dà in uno dei suoi discorsi.
function constructor(spec) {
let {member} = spec,
{other} = other_constructor(spec),
method = function() {
// accesses member, other, method, spec
};
return Object.freeze({
method,
other
});
}
E qui è un esempio da a gist
function dog(spec) {
var { name, breed } = spec,
{ say } = talker({ name }),
bark = function() {
if (breed === 'chiuaua') {
say('Yiff!');
} else if (breed === 'labrador') {
say('Rwoooooffff!');
}
};
return Object.freeze({
bark,
breed
});
}
function talker(spec) {
var { name } = spec;
var say = function(sound) {
console.log(name, "said:", sound)
}
return Object.freeze({
say
});
}
var buttercup = dog({ name: 'Buttercup', breed: 'chiuaua' });
Sono confuso di un paio di cose.
Non ho mai visto i letterali oggetto utilizzati in questo modo prima.
- Non specifica coppie chiave-valore e invece solo la virgola separa le stringhe.
- li utilizza sulla mano sinistra di un'assegnazione
Inoltre, quali sono i vantaggi offerti dal congelamento l'oggetto torna?