In derivazione classe standard, v'è l'errore quasi universale di derivare da un'istanza classe base appena creata (B.prototype = new A). Il costruttore della classe base esegue perlomeno codice non necessario e, nel peggiore dei casi, potrebbe bloccarsi senza gli argomenti di input che non dovrebbero essere creati artificialmente solo per motivi di derivazione. Inoltre, le funzioni di istanza dell'istanza della classe base diventano parte del prototipo delle classi derivate, che è appropriato solo per pura fortuna.
Sia chiaro! Se si eredita da un'istanza della classe base creata dal costruttore della classe base (B.prototype = new A) in realtà non si eredita direttamente dalla classe base !! Hai creato un intermediario nella catena ereditaria, ovvero l'istanza della classe base !!! Ahia!!!! Questo è inefficiente perché c'è una maggiore profondità nella ricerca di valori di proprietà ereditate nella catena di ereditarietà. Questa profondità si accumula ogni volta che commetti questo errore.
Quindi qual è il modo corretto. Invece di B.prototype = new A dovresti scrivere B.prototype = Object.create (A.prototype). Questo non può essere stato disponibile in 09. Tuttavia, in 09 non era ancora
protoProxy = function(myClass)
{
function foo(){};
foo.prototype = myClass.prototype;
return new foo();
}
come un sostituto per Object.create. Invece di B.prototype = new A dovresti scrivere B.prototype = protoProxy (A) in 09;
fonte
2013-11-25 08:13:35
grazie in anticipo. –
in anticipo di quanto –
anticipo di ringraziamenti –