Следующая машинопись Код:Как работает расширение в TypeScript?
class BaseClassWithConstructor {
private _id: number;
constructor(id: number) {
this._id = id;
}
}
class DerivedClassWithConstructor extends BaseClassWithConstructor {
private _name: string;
constructor(id: number, name: string) {
this._name = name;
super(id);
}
}
Формирует следующий код JavaScript:
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
var BaseClassWithConstructor = (function() {
function BaseClassWithConstructor(id) {
this._id = id;
}
return BaseClassWithConstructor;
})();
var DerivedClassWithConstructor = (function (_super) {
__extends(DerivedClassWithConstructor, _super);
function DerivedClassWithConstructor(id, name) {
this._name = name;
_super.call(this, id);
}
return DerivedClassWithConstructor;
})(BaseClassWithConstructor);
extends
, кажется, реализуется с помощью функции __extends
.
Попытка разработать магию за этой функцией. Я не понимаю, почему мы должны скопировать свойства базового класса в производный класс (т. Е. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
) и создать новый объект с помощью функции __
и подключить прототипы между b
, __
, d
и экземпляр __
.
Какова причина всего этого?
Возможно, для поддержки будущего класса? –