我在当前项目中使用的设计模式是:
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
到底存储在哪里?如何检查/显示它?
答案 0 :(得分:1)
使用ES6 class
,它原型上是从父类(构造函数对象)继承的:
function MyConstructor() { /* … */ }
MyConstructor.STATIC_PROPERTY = 'static';
class ChildClass extends MyConstructor { /* … */ }
console.log(ChildClass.STATIC_PROPERTY);
另一种选择是要么复制所有属性(如Object.assign
),要么在Object.setPrototypeOf
上使用ChildClass
。