尝试为库中的一个复杂功能创建一个 mixin。这对我来说是可行的:const proto = Object.create(Function.prototype); 但现在我需要进行一些多重继承,以便
尝试为库中的一个复杂功能创建一个混合体。
这对我有用:
const proto = Object.create(Function.prototype);
但是现在我需要做一些多重继承,使得一个对象从 Function 原型和事件发射器原型继承,所以我想这样做:
const EE = require('events');
const proto = Object.create(Object.assign({}, EE.prototype, Function.prototype));
但效果并不如预期。
因此我尝试了这个:
const proto = Object.assign({}, Function.prototype);
这表明由于某种原因 Function.prototype 没有被复制,我的观察正确吗?为什么会这样?
根据 ES6 规范的第 19.2.4.3 ,的属性 Function.prototype
不可枚举,并且 Object.assign()
仅复制可枚举的属性。这解释了为什么您的副本最终为空,因为 Object.assign()
没有看到任何不可枚举的属性,因此没有复制它们。
因此,如果您想复制属性,则必须使用不同的东西来获取属性。 Object.create()
可能是最好的方法,因为这就是它的设计目的。