Во время игры вокруг с онлайн машинопись компилятором, я заметил, что создатели решили реализовать наследование с помощью следующего метода (который я сделал несколько более читаемым):Цель собственности копирования на наследование типа
var __extends = function(type, base) {
for (var prop in base) { // why copy the properties?
if (base.hasOwnProperty(prop)) {
type[prop] = base[prop];
}
}
function __() { // <- ?
this.constructor = type;
}
__.prototype = base.prototype.
type.prototype = new __();
};
метод затем используется следующим образом:
var Item = (function() {
function Item() {
}
return Item;
})();
var Sword = (function (base) {
__extends (Sword, base);
function Sword() {
base.call(this);
}
return Sword;
})(Item);
Я с трудом understandind реализации метода __extends
.
Какова цель ручного копирования всех свойств из расширяемого типа? Не унаследуете прототип заботиться об этом?
Существует ли штраф за выполнение при поиске свойств в дереве прототипов, а не непосредственно скопированных свойствах?
Вторая часть, я также не могу понять цель. Вместо того, чтобы сделать это:
function __() {
this.constructor = type;
}
__.prototype = base.prototype.
type.prototype = new __();
Может ли это быть просто реализован как:
type.prototype = base.prototype;
Глядя на ответы на этот вопрос в ретроспективе, и теперь, когда я более опытен с TS, я чувствую, что ваш ответ более полный и информативный, и дает более глубокое понимание. Это был правильный ответ. – Acidic