不像 C++ 和 Java ,Js并未真正的支持类作为语言的具体构成要素,Js是使用prototype作为模拟的类。
在 C++ 中,代码都会被编译成底层的代码再去执行。其中,对象访问成员的语句,都会在编译阶段解析为对象指针+偏移。偏移的数值是固定的,即在函数中对象访问成员的代码和行为都是固定的。即使是触发动态绑定的多态情况,也是通过选择不同的虚函数从而决定对象访问成员的行为,也因为这样对象调用
Js的代码是解释型的,其中的对象是通过数据字典的方式访问成员。这样的方式,让Js的函数没有办法主导对象访问成员的行为,从而无法直接达到多态的效果。而且,使用了这种字典访问的方式,会使的继承后的同名成员出现覆盖的现象,而不是共存。无法共存同名成员,会使的父类遭到破坏,这与传统的类存在很大的差异。
欢迎大家补充更多细节。