При выводе стандартного класса существует почти универсальная ошибка при выводе из вновь созданного экземпляра базового класса (B.prototype = new A). Конструктор базового класса, по крайней мере, выполняет ненужный код, а в худшем случае может произойти сбой без входных аргументов, которые не должны создаваться искусственно только для деривации. Кроме того, функции экземпляра экземпляра базового класса становятся частью прототипа производных классов, что подходит только по счастливой случайности.
Давайте будем ясны! Если вы наследуете от экземпляра базового класса, созданного конструктором базового класса (B.prototype = new A), вы фактически не наследуете напрямую от базового класса !! Вы создали посредника в цепочке наследования, а именно экземпляр базового класса !!! Ой !!!! Это неэффективно, поскольку существует дополнительная глубина поиска значений наследуемого свойства в цепочке наследования. Эта глубина накапливается каждый раз, когда вы совершаете эту ошибку.
Так что это правильный путь. Вместо B.prototype = new A вы должны написать
B.prototype = Object.create (A.prototype). Это, возможно, не было доступно в 09. Однако в 09 все еще было
protoProxy = function(myClass)
{
function foo(){};
foo.prototype = myClass.prototype;
return new foo();
}
в качестве замены для Object.create. Вместо B.prototype = new A вы должны написать
B.prototype = protoProxy (A) в 09;