3 回答
TA贡献1817条经验 获得超14个赞
请允许我实际回答内联问题。
原型继承具有以下优点:
它更适合动态语言,因为继承与它所处的环境一样动态。(这里对JavaScript的适用性应该很明显。)这允许你快速做事,比如在没有大量基础设施代码的情况下定制类。 。
与经典的类/对象二分法方案相比,实现原型对象方案更容易。
它消除了对象模型周围的复杂尖锐边缘的需要,如“元类”(我从未使用过类,我喜欢......对不起!)或“特征值”等。
但它有以下缺点:
检查原型语言的类型并非不可能,但这非常非常困难。大多数原型语言的“类型检查”是纯粹的运行时“鸭子打字”式检查。这不适合所有环境。
同样难以通过静态(或通常甚至动态!)分析来优化方法调度。它可以(我强调:可以)很容易效率很低。
类似地,对象创建在原型语言中可以(并且通常是)比在更传统的类/对象二分法中更慢。
我想你可以在上面的行之间阅读并提出传统类/对象方案的相应优缺点。当然,每个区域都有更多,所以我会将其余部分留给其他人回答。
TA贡献1783条经验 获得超4个赞
IMO原型继承的主要好处是它的简单性。
语言的原型性质可以迷惑谁是人经典的训练,但事实证明,其实这是一个真正简单而强大的概念,差分继承。
您不需要进行分类,代码更小,冗余更少,对象继承自其他更通用的对象。
如果你原型思考,你很快就会注意到你不需要上课......
原型继承在不久的将来会更受欢迎,ECMAScript第5版规范引入了该Object.create
方法,该方法允许您以非常简单的方式生成从另一个继承的新对象实例:
var obj = Object.create(baseInstance);
所有浏览器供应商都在实施该标准的新版本,我认为我们将开始看到更纯粹的原型继承......
添加回答
举报