Javascript中混合和继承的实际区别是什么?

Javascript中混合和继承的实际区别是什么?,javascript,inheritance,traits,mixins,object-composition,Javascript,Inheritance,Traits,Mixins,Object Composition,只是(模拟)多重继承是混合的唯一优势: Object.assign( MyClassA.prototype, MyMixinB ) 与继承 class MyClass extends MyClassB { // MyClassB = class version of MyMixinB 在ES6 Javascript中 谢谢不会有那么简单的答案。JavaScript(JS)为构建类型/对象系统提供了许多不同的技术方法(以及如何将它们结合在一起),因此具有实用性 首先,正如OP(orig

只是(模拟)多重继承是混合的唯一优势:

 Object.assign( MyClassA.prototype, MyMixinB )
与继承

 class MyClass extends MyClassB {

 // MyClassB = class version of MyMixinB
在ES6 Javascript中


谢谢

不会有那么简单的答案。JavaScript(JS)为构建类型/对象系统提供了许多不同的技术方法(以及如何将它们结合在一起),因此具有实用性

首先,正如OP(original poster)所知,JS中没有真正的多重继承。这种语言只提供基于原型的单一继承(可以链接),而不管选择类还是传统的纯函数式继承

但是,第二,与其他编程语言(PL)一样,还有另一种非基于继承的代码重用和对象组合方式。。。它是混合和/或基于特征的合成

但我将坚持使用OP提供的示例代码所提供的两种方法

Object.assign(MyClassA.prototype, MyMixinB)
如果考虑到
MyMixinB
作为基于对象的mixin提供额外的行为,例如

var-arr=['object','based','mixin','approach'];
var list={length:4,0:'the',1:'quick',2:'brown',3:'fox'};
log('(typeof arr.last):',(typeof arr.last));
log('(typeof list.last):',(typeof list.last));
常量withObjectBasedListLastBehavior={
最后:函数(){
返回此[this.length-1];
}
}
分配(Array.prototype,withObjectBasedListLastBehavior);
分配(列表,withObjectBasedListLastBehavior);
log('(typeof arr.last):',(typeof arr.last));
log('arr.last():',arr.last());
log('(typeof list.last):',(typeof list.last));
log('list.last():',list.last());
log('(arr.last==list.last):',(arr.last==list.last));
log('(arr.last==Array.prototype.last):',(arr.last==Array.prototype.last))
.as控制台包装{max height:100%!important;top:0;}
什么是“的类版本”?