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

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到底存储在哪里?如何检查/显示它?

最佳答案

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



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

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





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

09-17 13:06