什么是javascript中的虚函数?

时间:2017-11-15 07:26:03

标签: javascript oop virtual-functions

根据虚拟功能的一个定义:

  

在面向对象的编程中,在诸如C ++之类的语言中,是虚拟的   function或virtual方法是一个可继承和可覆盖的函数   或促进动态调度的方法。

这将如何在javascript中查找函数?

1 个答案:

答案 0 :(得分:4)

  

这将如何在javascript中查找函数?

这个概念在很大程度上并不适用于JavaScript。

虚拟和非虚函数(方法,真的)的概念需要对对象的类型的概念,与对象 的区别不同。例如,您的BaseFoo类型可能包含bar方法,DerivedFoo类型可以从中派生并覆盖bar。之后,如果您有一个引用BaseFoo对象的b类型变量DerivedFoo,当您致电b.bar()时,您将获得DerivedFoo& {39} bar如果bar是虚拟的,BaseFoo bar如果bar是非虚拟的。但是,如果您有DerivedFoo - 类型变量d引用DerivedFoo对象,则d.bar()始终会调用bar是否为虚拟对象。您用来引用对象的变量的类型决定了该方法非虚拟时调用的方法。

JavaScript中不存在任何内容。对象的引用是无类型。当您致电o.bar()时,您会从该对象获取属性bar并调用它所引用的函数。

如果你想扩展一点,给定JavaScript的原型继承机制,你可以说在某种意义上,所有的JavaScript"方法"是虚拟的,如果我们非常松散地说"方法"是一个附加到对象属性的函数(虽然在ES2015 +中,"方法"在JavaScript中具有比这更具体的含义,但仍然符合该定义)。这是因为当你在一个对象上查找一个属性时,如果它有自己的属性,那就是你获得的属性;如果它没有自己的原型,你只能从它的原型中得到它。但这可能会拉长一点,也许太过分了。