Wil*_*hoi 28 javascript oop inheritance static
我试图用原型继承方式在JavaScript中实现一些基本的OOP.但是,我发现无法从基类继承静态成员(方法).
我们可以使用原型模拟基本类模型:
SomeClass = function(){
var private_members;
this.public_method = function(){
//some instance stuff..
};
};
Class.static_method = function(){
//some static stuff;
};
//Inheritance
SubClass = function(){ //sub-class definition };
SubClass.prototype = new Class();
Run Code Online (Sandbox Code Playgroud)
但是,SubClass不继承static_method自Class.
Dra*_*DTG 16
在经典(OO)继承模式中,静态方法实际上不会被继承下来.因此,如果你有一个静态方法,为什么不调用:SuperClass.static_method()只要你需要它,就不需要JavaScript来保留额外的引用或相同方法的副本.
您还可以阅读此JavaScript覆盖模式,以更好地了解如何在JavaScript中实现继承.
在示例代码之后,您可以执行以下操作:
for (var i in Class) {
SomeClass[i] = Class[i];
}
Run Code Online (Sandbox Code Playgroud)
将静态成员复制Class到SubClass.
如果您正在使用jQuery,请查看JavaScriptMVC中的jQuery.Class插件.或者,您可以扩展John Resig的简单JavaScript继承,以获得更多与库无关的系统.
对于ES5,您需要使用Object.assign将静态方法从BaseClass复制到SubClass,但对于ES6,它应该不使用Object.assign
var BaseClass = function(){
}
BaseClass.sayHi = function(){
console.log("Hi!");
}
var SubClass = function(){
}
Object.assign(SubClass , BaseClass);
BaseClass.sayHi(); //Hi
SubClass.sayHi(); //HiRun Code Online (Sandbox Code Playgroud)
class BaseClass {
static sayHi(){
console.log("Hi!");
}
}
class SubClass extends BaseClass{
}
BaseClass.sayHi() //Hi
SubClass.sayHi() //HiRun Code Online (Sandbox Code Playgroud)
小智 7
试试这个:
class BaseClass {
static baseMethod () {
console.log("Hello from baseMethod");
}
}
class MyClass extends BaseClass {
constructor(props) {
super(props);
}
}
Object.assign(MyClass, BaseClass);
Run Code Online (Sandbox Code Playgroud)
他们的关键Object.assign应该是每个人都是最好的朋友.现在,您可以调用任何基础的方法BaseClass使用MyClass如下:
MyClass.baseMethod();
Run Code Online (Sandbox Code Playgroud)
你可以在这支笔上看到这个现场直播.
请享用!