cosa è la differenza traeredità JavaScript con _.extend()
Employee.prototype = Object.create(Person.prototype);
e
_.extend(Employee.prototype, Person.prototype);
Entrambi dare risultati simili (output), ma il metodo di sottolineatura sembra aggiungere il Person.prototype a il Employee.constructor.prototype, e piuttosto abit roba extra qua e là, perché?
pura JS
underscoreJS
Un bel effetto collaterale di _.extend
è che posso facilmente fare l'ereditarietà multipla: sembra come si pretende molto fare la catena di prototipi più a lungo troppo. ..
_.extend(Employee.prototype, Person.prototype);
_.extend(Employee.prototype, {
doSomething: function() {
return "hi ...";
}
});
Ma ...
Perché c'è 2 funzioni SayHi e DoSomething? (in realtà è lo stesso quando faccio solo 1 estensione).
Un'altra differenza è '_.extend' sembra estendere' constructor.prototype' (non '.extend')? Sono gli stessi"? Oltre a loro in posti diversi? –
'_.extend' modifica il primo oggetto passato, quindi, nel mio esempio,' b' rimane invariato, ma 'a' è effettivamente esteso da' b'. In '_.extend ({}, a, b)', 'a' e' b' rimangono invariati, e '{}' è esteso per le loro proprietà. – rdiazv
Nota che se lo fai in questo modo, cioè '_.extend (Employee.prototype, Person.prototype);', ogni istanza creata con 'new' ti restituirà un' Employee', e quel Dipendente non sarà un 'Persona', cioè' new Employee() instanceof Person' dovrebbe essere 'false'. – user3743222