【发布时间】:2014-08-08 22:45:30
【问题描述】:
在 classfull-Style (c++) 或传统设计模式 (GofPatterns) 中,组合和继承之间的区别是什么以及如何实现以及何时使用什么(优点/缺点)非常清楚。
但是你如何区分组合或 JS 中的“正常”继承?还是用同一个词?
例如,原型继承是定义为组合还是继承?
你们在想什么?
【问题讨论】:
-
是JavaScript对继承的实现。它基本上是一个对象的查找链。当您从一个对象请求一个属性时,如果该对象没有它,它会查看其原型链中的下一个对象,依此类推,直到找到该属性或到达链的末尾。许多对象可以并且确实从单个对象继承。
-
...或者这完全是一个语义问题?您是在问 JavaScript 的原型继承是否也可以描述为组合?
-
对不起,我问的不是很清楚......谢谢,但我知道原型继承,原型链以及 js 中的 OOP 是如何工作的......是的,你是对的 @cookie 怪物,它的整个语义你定义的问题:)...当有人问我 js 中的组合与继承如何工作时,我可以说原型继承是一种组合方式还是我应该说组合和一般继承之间没有区别(使用 fe 扩展)... 作为工程师,您将如何回答这个问题?
-
这是一个有趣的问题。我想我从来没有真正听说过在 JS 的上下文中讨论过组合,但我想它的继承模型在某种意义上可以看作是使用组合构建的,因为对象的原型是具有自己属性的单独对象,比如一个隐式链表。但是,在使用“继承”属性时,它们就像是实际对象的一部分一样运行,例如,继承方法中的
this的值是实际对象而不是方法所有者。所以这一切似乎有点混乱。我想我没有明确的答案。 -
...我想知道programmers.stackexchange.com/help/on-topic 站点是否更适合解决这个问题。但通常它只是被认为是 JavaScript 的继承模型。
标签: javascript inheritance prototype composition