Наследование статических свойств в Javascript - PullRequest
2 голосов
/ 25 сентября 2019

Шаблон дизайна, который я использую в моем текущем проекте:

var MyConstructor = function() { ... };
MyConstructor.STATIC_PROPERTY = 'static';

Теперь, если я хочу наследовать от класса MyConstructor, я бы сделал:

var ChildClass = function() { ... };
ChildClass.prototype = new MyConstructor(); // Or Object.create(...)
ChildClass.prototype.constructor = ChildClass;

Проблема в ChildClass.STATIC_PROPERTY не определено / не наследуется ...

Есть ли способ исправить это?

Вторичный вопрос:

Если я console.log(MyConstructor), я бы получил function() { ...} и ничего о MyConstructor.STATIC_PROPERTY, когда оно на самом деле там.Где это STATIC_PROPERTY хранится в конце?Как я могу проверить / показать это?

1 Ответ

1 голос
/ 25 сентября 2019

Используйте ES6 class, который прототипически наследуется от родительского класса (объекта функции конструктора):

function MyConstructor() { /* … */ }
MyConstructor.STATIC_PROPERTY = 'static';

class ChildClass extends MyConstructor { /* … */ }
console.log(ChildClass.STATIC_PROPERTY);

Альтернативой может быть либо копирование всех свойств (например, с Object.assign), либо использование Object.setPrototypeOf в ChildClass.

...