Javascript缺少类构造,但是你仍然可以通过许多不同的方式实现继承。
您可以通过利用原型来创建构造函数,从而通过委托实现继承来模仿类。
最常见的方法是使用new
关键字,但您也可以实施object.create()
。
或者,您可以采用连接方法并将希望对象直接继承的行为复制到对象本身,而不是将其[[prototype]]
指向另一个对象。
JS中每种模式的优点和缺点是什么?
似乎许多专家都在倡导串联方法,例如Doug Crockford。然而,代表团模式目前显然更受欢迎。
我知道,一般来说,连接方法会更灵活,但会消耗更多内存,因为您的复制方法遍布整个地方,而不仅仅是引用一个公共集合。
但是,我也知道V8引擎有优化这些东西的方法。
除了性能之外,您可以通过串联实现通过串联实现的任何功能吗?例如,在委托中,我可以在超类中实现一个实现一些基本功能的方法,在我的子类方法中,我可以调用超级方法,然后在返回最终结果之前进行一些特定于子类的计算。我不能想到使用连接方法做到这一点的方法而不使用不同的方法名称。
答案 0 :(得分:1)
主要区别在于对象大小和灵活性。继承属性而不是复制它们会导致较小的对象,尤其是在方法API相对较大的情况下。此外,从仍然可以操作的单个对象继承属性更具动态性(请参阅Does some JavaScript library use dynamic aspects of the prototype system?)。优化可能比继承静态对象更复杂,但它仍然比不在对象之间共享更快。