Object.assign似乎不适用于Function.prototype

试图创build一个混合,为一个库中的一个复杂的function。

这是为我工作:

const proto = Object.create(Function.prototype); 

但现在我需要做一些多重inheritance,这样一个对象inheritance了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()可能是最好的方法,因为这是它的目的。

@ jrfiend00对此可能是正确的。 看来我能够实现我想要做的事情,就像这样:

 const $proto = Object.create(Function.prototype); const proto = Object.assign($proto, EE.prototype); 

两步混合。

通常情况下,我希望能够做到这一点:

 const proto = Object.assign({}, EE.prototype, Function.prototype); 

但是这不起作用,最有可能的原因是jfriend00指定。 不知道为什么规范允许Object.create为此工作。