Вы можете избежать повторного вызова A, если используете Object.create
B.prototype = Object.create(A.prototype)
Object.create создает новый объект, у которого задан параметр в качестве прототипа (фактический прототип, а не свойство "prototype").Его нет в старых браузерах (IE <8, FF <4), но вы можете (для наших целей) создать свою собственную версию, если хотите.Основная идея состоит в том, чтобы точно создать версию <code>A, которая ничего не делает (и поэтому может быть вызвана без нежелательных побочных эффектов)
if(!Object.create){
Object.create = function(proto){
var F = function(){};
F.prototype = proto;
return new F(); //BTW, always use parenthesis when calling new. It looks better.
}
}
Еще одна вещь, которую вы можете сделать, это никогда не помещать логику в функцию конструктора и вместо этогопоместите его в отдельный init
метод, который должен быть вызван впоследствии.