Ну на самом деле разница между B и E есть, в случае E, когда метод объявляется прямо в конструкторе он будет иметь доступ к приватным переменным и методам, это так называемые привилегированные методы, а вот в примере B нет возможности работать с приватными данными.
Вот о чем я говорю:
var MyClass = function() {
// Приватные атрибуты
var _a, _b;
// Приватный метод
function _myPrivate(isbn) {
}
// публичный привилегированный метод
this.MyPublicPlus = function() {
};
}
// публичный непривилегированный метод.
MyClass.prototype = {
MyPublic: function() {
}
};
Метод MyPublicPlus будет иметь доступ к _a, _b и _myPrivate(), а MyPublic нет…