Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的实抽象方法_Javascript_Inheritance_Abstract Methods - Fatal编程技术网

javascript中的实抽象方法

javascript中的实抽象方法,javascript,inheritance,abstract-methods,Javascript,Inheritance,Abstract Methods,我想用javascript创建一个抽象类,它实现某些方法,调用抽象类,并让“继承的”类实现这些抽象类。我读了很多关于js原型的书。javascript中抽象类和方法的每一个建议实现似乎都是一个简单的继承,但不是真正的抽象。 下面是一个非常简单的示例,展示了我想要实现的目标: var抽象类={ abstractMethod:function(){/*我还不知道我要做什么*/}, 具体方法:函数(){ abstractClass.abstractMethod(); } } specializedC

我想用javascript创建一个抽象类,它实现某些方法,调用抽象类,并让“继承的”类实现这些抽象类。我读了很多关于js原型的书。javascript中抽象类和方法的每一个建议实现似乎都是一个简单的继承,但不是真正的抽象。 下面是一个非常简单的示例,展示了我想要实现的目标:

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();