Стандартный способ вызова конструктора суперкласса - это Function.call
:
function Moveable(x, y) {
Sprite.call(this, x, y);
}
Что касается прототипа, вы можете сделать что-то подобное, чтобы связать прототип без созданияэкземпляр суперкласса:
function makePrototype(superclass) {
function f() { }
f.prototype = superclass.prototype;
return new f();
}
Moveable.prototype = makePrototype(Sprite);
При этом используется фиктивный конструктор для создания объекта, который использует тот же прототип, что и Sprite
, и, поскольку это все, что заботит JavaScript, экземпляры Moveable
считаются instanceof Sprite
.
Это не "короткий и читабельный", как вы просили, но единственный другой вариант - полностью пропустить прототипы и назначить элементы непосредственно в конструкторе.
Редактировать: Как указывает @Raynos, вы также хотите установить свойство constructor
(которое выполняется по умолчанию в JavaScript, но теряется при сбросе Moveable.prototype
):
Moveable.prototype.constructor = Moveable;