在JavaScript中继承静态属性

时间:2019-09-25 14:46:07

标签: javascript class inheritance properties static

我在当前项目中使用的设计模式是:

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 个答案:

答案 0 :(得分:1)

使用ES6 class,它原型上是从父类(构造函数对象)继承的:

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

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

另一种选择是要么复制所有属性(如Object.assign),要么在Object.setPrototypeOf上使用ChildClass