Object.assign似乎不能与Function.prototype一起使用

时间:2016-11-03 04:37:23

标签: javascript node.js mixins

尝试为库中的复杂功能创建mixin。

这对我有用:

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,我的观察是否正确?为什么会这样?

2 个答案:

答案 0 :(得分:4)

根据19.2.4.3 of the ES6 spec部分,Function.prototype的属性不可枚举,Object.assign()只复制可枚举的属性。这就解释了为什么你的副本结果为空,因为Object.assign()没有看到任何不可枚举的属性,因此没有复制它们。

因此,如果要复制属性,则必须使用不同的属性获取属性。 Object.create()可能是最好的方法,因为它就是它的设计目标。

答案 1 :(得分:0)

@ 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为此工作。