javascript中的实抽象方法
我想用javascript创建一个抽象类,它实现某些方法,调用抽象类,并让“继承的”类实现这些抽象类。我读了很多关于js原型的书。javascript中抽象类和方法的每一个建议实现似乎都是一个简单的继承,但不是真正的抽象。 下面是一个非常简单的示例,展示了我想要实现的目标:javascript中的实抽象方法,javascript,inheritance,abstract-methods,Javascript,Inheritance,Abstract Methods,我想用javascript创建一个抽象类,它实现某些方法,调用抽象类,并让“继承的”类实现这些抽象类。我读了很多关于js原型的书。javascript中抽象类和方法的每一个建议实现似乎都是一个简单的继承,但不是真正的抽象。 下面是一个非常简单的示例,展示了我想要实现的目标: var抽象类={ abstractMethod:function(){/*我还不知道我要做什么*/}, 具体方法:函数(){ abstractClass.abstractMethod(); } } specializedC
var抽象类={
abstractMethod:function(){/*我还不知道我要做什么*/},
具体方法:函数(){
abstractClass.abstractMethod();
}
}
specializedClass=Object.create(abstractClass);
specializedClass.abstractMethod=函数(){
警惕(“现在我知道该怎么办了”);
}
specializedClass.concreteMethod()代码>在方法内部,使用它而不是命名的类/变量,该类/变量由您的Object.create()调用复制/破坏
var抽象类={
abstractMethod:function(){/*我还不知道我要做什么*/},
具体方法:函数(){
this.abstractMethod();//<使用此
}
}
specializedClass=Object.create(abstractClass);
specializedClass.abstractMethod=函数(){
警惕(“现在我知道该怎么办了”);
}
specializedClass.concreteMethod();
这些都是实例,而不是类。我会避免将JavaScript塑造成经典语言。实际上,js中没有类这样的东西,尽管我们在ES6/2015中有class关键字,但这只是语法上的糖分。检查一下:我并不真的想构建类继承,我只想创建某种定时服务,它处理启动/停止间隔,用户类只需在ticks@kexx-在这种情况下,更好的模式是注入回调(操作…)在真正的oop语言中使用抽象方法时,要点是相同的:您可能希望在基类中调用它。也许在js的情况下它不是必需的,但我把它放在那里是为了example@kexx:查看super和ES6类的新显式结构,以获得更符合人体工程学的OOP编码。硬编码的问题是Object.create()会导致在新对象specializedClass上定义新方法,而不是在specializedClass.prototype上定义新方法,您的后期修改将使其工作。实际上,specializedClass.prototype上的concreteMethod没有从实例中自己的属性方法abstractMethod继承。@kexx-错误。抽象函数在“real OOP”中没有实现,它只是用签名声明的。@Amit:我没有说必须实现抽象函数,但是抽象类可以包含调用抽象函数的具体函数实现
var abstractClass = {
abstractMethod: function() { /* i don't know yet what i'm going to do */ },
concreteMethod: function() {
this.abstractMethod(); // < made generic with this
}
}
specializedClass = Object.create(abstractClass);
specializedClass.abstractMethod = function() {
alert('Now i know what to do');
}
specializedClass.concreteMethod();