【发布时间】:2020-01-25 19:20:23
【问题描述】:
我在当前项目中使用的设计模式是:
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 到底存储在哪里?如何查看/显示它?
【问题讨论】:
-
“静态”属性只是构造函数对象的属性。它们与 JavaScript 继承方案没有任何关系。
-
尝试
console.dir(MyConstructor)查看静态属性。 -
由于您可以在定义
ChildClass的范围内访问MyConstructor(),因此ChildClass.STATIC_PROPERTY = MyConstructor.STATIC_PROPERTY之类的东西应该可以工作。 (但可能不是可取的)如前所述,它与原型继承无关。不使用Object.defineProperty()或者它的替代品,它是静态的。我们可以随心所欲地覆盖它。 -
"Or Object.create(...)" - it's not exactly optional
标签: javascript class inheritance properties static