根据虚拟功能的一个定义:
在面向对象的编程中,在诸如C ++之类的语言中,是虚拟的 function或virtual方法是一个可继承和可覆盖的函数 或促进动态调度的方法。
这将如何在javascript中查找函数?
答案 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中具有比这更具体的含义,但仍然符合该定义)。这是因为当你在一个对象上查找一个属性时,如果它有自己的属性,那就是你获得的属性;如果它没有自己的原型,你只能从它的原型中得到它。但这可能会拉长一点,也许太过分了。