Ваш первый пример выглядит хорошо.
Второй пример будет работать, только если Function.prototype
было присвоено свойство функции extend
, в противном случае он выдаст TypeError
.
Вместо этого попробуйте что-то вроде этого.
function CustomClassB(){
console.log('Custom Class B loaded');
this.message = ' Method Called from class B';
}
CustomClassB.prototype = Object.create(CustomClassA.prototype);
CustomClassB.prototype.firstMethod = function(msg){this._output(msg);};
CustomClassB.prototype.secondMethod = function(msg){this._output(msg);};
CustomClassB.prototype.thirdMethod = function(msg){this._output(msg);};
CustomClassB.prototype._output = function(m){return console.log(m + this.message);};
Или, если вы хотите больше синтаксического сахара, вы можете создать вспомогательную функцию, чтобы скопировать прототип и объединить в него объект с синтаксисом вызова, таким как extend
вы используетеЯ бы не рекомендовал прикреплять его к Function.prototype
, поскольку есть большая вероятность, что он может столкнуться с каким-либо сторонним кодом.
Старые браузеры не поддерживают Object.create
.Если вам требуется поддержка устаревших браузеров, вы можете написать такую функцию для эмуляции:
function objectCreate(o) {
function F() {}
F.prototype = o;
return new F();
}
См. здесь , чтобы посмотреть, как это развивалось.