Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Object.assign不';似乎无法使用Function.prototype_Javascript_Node.js_Mixins - Fatal编程技术网

Javascript Object.assign不';似乎无法使用Function.prototype

Javascript Object.assign不';似乎无法使用Function.prototype,javascript,node.js,mixins,Javascript,Node.js,Mixins,尝试为库中的复杂功能创建mixin 这对我很有用: const proto = Object.create(Function.prototype); 但是现在我需要做一些多重继承,这样一个对象同时从函数原型和事件发射器原型继承,所以我想这样做: const EE = require('events'); const proto = Object.create(Object.assign({}, EE.prototype, Function.prototype)); const proto

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

这对我很有用:

const proto = Object.create(Function.prototype);
但是现在我需要做一些多重继承,这样一个对象同时从函数原型和事件发射器原型继承,所以我想这样做:

const EE = require('events');

const proto = Object.create(Object.assign({}, EE.prototype, Function.prototype));
const proto = Object.assign({}, EE.prototype, Function.prototype);
但这并没有像预期的那样奏效

然后我试着这样做:

const proto = Object.assign({}, Function.prototype);
这表明出于某种原因,Function.prototype没有被复制,我的观察正确吗?为什么会这样?

每个部分,
Function.prototype
的属性不可枚举,而
Object.assign()只复制可枚举属性。这解释了为什么您的副本最终为空,因为
Object.assign()
没有看到任何不可枚举的属性,因此没有复制它们


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

@jrfiend00可能是正确的。我似乎能够实现我想做的事情,比如:

const $proto = Object.create(Function.prototype);
const proto = Object.assign($proto, EE.prototype);
两步混合

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

const EE = require('events');

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

但这不起作用,很可能是因为jfriend00指定的原因。不确定规范为什么允许Object.create用于此功能。

我猜Function.prototype被视为“主机对象”。所以浏览器对待它的方式不同。@vothaison-为什么你认为Function.prototype是一个宿主对象?它完全是语言的一部分,而不是environment.ftm,只讨论node.js,而不是浏览器
Object.create()
是用来处理原型上不可枚举的属性的。这看起来是一个很好的方法。稍后在调用proto.once()后,我在程序=>“TypeError:Cannot assign to read-only property'\u events'”中遇到了这个错误,我不确定\u events是来自EventEmitter的。我发现,我自己将属性冻结为只读,与上述方法无关,请忽略:)