C++的代码都会编译成底层的代码后才被执行。其中对象访问成员的语句,都会在编译阶段解析为对象指针+偏移。偏移的数值是固定的,也就是说,在函数中对象访问成员的代码和行为是固定的。即使是触发动态绑定的多态情况,也是通过选择不同的虚函数从而决定对象访问成员的行为,也因为这样对象调用虚函数看上去就像使用了自己真正的类型。
JS的代码是解释型的,其中对象是通过字典的方式访问成员。这种方式,使得JS的函数不能主导对象访问成员的行为,从而无法直接达到多态的效果。而且,使用了这种字典访问的方式,会使得继承后的同名成员会出现覆盖的现象,而不是共存。无法共存同名成员,使得父类遭到破坏,这与传统的类存在很大的差异。
网友评论