簡體   English   中英

Object.assign似乎不適用於Function.prototype

[英]Object.assign doesn't seem to work with 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()可能是執行此操作的最佳方法,因為這正是它的設計目的。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM