我在当前项目中使用的设计模式是:
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
。