В только что продемонстрированном примере функция_конструктор Positioned_ Rectangle() должна явно вызывать функцию_конструктор надкласса. Это назы_ вается вызовом конструктора по цепочке и является обычной практикой при создании подклассов. Вы можете упростить синтаксис конструктора, добавив свойство superclass в объект_прототип подкласса:
// Сохранить ссылку на конструктор надкласса. PositionedRectangle.prototype.superclass = Rectangle;
Однако следует заметить, что такой прием можно использовать только при усло_ вии неглубокой иерархии наследования. Так, если класс В является наследником класса А, а класс С – наследником класса В, и в обоих классах В и С используется прием с обращением к свойству superclass, то при попытке создать экземпляр класса С ссылка this.superclass будет указывать на конструктор В(), что в резуль_ тате приведет к бесконечному рекурсивному зацикливанию конструктора В(). Поэтому для всего, что не является простым подклассом, используйте методику вызова конструктора по цепочке, которая продемонстрирована в примере 9.3.
После того как свойство определено, синтаксис вызова конструктора по цепочке становится значительно проще:
function PositionedRectangle(x, y, w, h) { this.superclass(w,h);
this.x = x; this.y = y;
}
Обратите внимание: функция_конструктор явно вызывается в контексте объек_ та this. Это означает, что можно отказаться от использования метода call() или apply() для вызова конструктора надкласса как метода данного объекта.