我的问题,见下文,是如何声明 STATIC 函数和常量pre-ES6类所以它们可以被继承?
在问题之前我们已经对当前的 ES6 类和 ES6 之前的类进行了回顾,因此我们都使用相同的约定。
在 ES6 之后,我们可以在类中定义静态函数,如下所示:
class MyClass {
static someMethod () {
console.log('Doing someMethod');
}
}
在 ES6 之前,我可以创建一个基类,如下所示:
var MyClassBase = function(str){
this.m_Data = str; // This acts a bit like a constructor where you can assign data within the class
};
您可以使用以下命令创建 ES6 之前的实例
var myclassbase = new MyClassBase("Wibble");
您可以创建该类的 ES6 之前的非静态成员函数:
MyClassBase.prototype.EchoData = function(){
console.log(this.m_Data);
}
您需要一个实例来调用该非静态成员函数:
var myclassbase = new MyClassBase("Wibble");
myclassbase.EchoData();
为了继承,在 ES6 之前我会做类似的事情:
var MyClass = function(str){
MyClassBase.call(this, str);
};
MyClass.prototype = new MyClassBase(); // inherit
[编辑]:但是 @adiga 在评论中建议(请参阅他们的有用链接),更好的方法是:
var MyClass = function(str){
MyClassBase.call(this, str);
};
MyClass.prototype = Object.create(MyClassBase.prototype);
MyClass.prototype.constructor = MyClass;
这就是全部背景。现在关于静力学的问题。
问题:ES6 之前的版本如何在基类中创建静态函数MyClassBase
无需实例即可调用,例如:
MyClassBase.StaticFunctionInMyClassBase();
MyClass.StaticFunctionInMyClassBase(); // This could be the inherited function from MyClassBase,
// or may be a redefined overridden function in MyClass
问题:如何将静态常量分配给MyClass
and MyClassBase
ES6 之前的版本可以在没有实例的情况下访问吗?例如,
var result = MyClassBase.TWO_PLUS_TWO; // Echos 4, a predefined static value in MyClassBase
var result = MyClass.TWO_PLUS_TWO; // Echos 5, if TWO_PLUS_TWO has been redefined in MyClass,
// or 4 if TWO_PLUS_TWO has no been redefined in MyClass
凯的建议:静态可以包含在以下内容中:
var MyClassBase = function(str){
this.m_Data = str;
};
MyClassBase.STATIC_STRING = "Ooops";
但是,当我创建我的课程时MyClass
它继承了MyClassBase
, then MyClass.STATIC_STRING
is undefined
。我只能通过以下方式访问“Ooops”MyClassBase.STATIC_STRING
。这是正常的班级惯例吗?