我必须为另一个废弃的npm库编写垫片。

其他人将使用new关键字调用此库。这是其他人所做的:

const Noble = require('noble/lib/noble');
var nobleInstance = new Noble(macBindings);
module.exports = nobleInstance;


现在,我编写了一个垫片,用于更改通过require('noble/lib/noble');导入的内容。为了让事情对我自己好,我想改变什么

new Noble(macBindings);


回来,所以每当我打电话

require('third-pary-library-using-new-noble');


我实际上将获得自己的返回值。

因此,为此,我需要更改new Noble(macBindings);返回的内容。提醒。我已经设法填充Noble函数。

我想知道的是,当有人使用new关键字调用函数时,是否可以更改返回的内容。

最后,我要实现的是当有人打电话时

var nobleInstance = new Noble(macBindings);


我希望nobleInstancemacBindings

最佳答案

据我所知,您不能替换调用new Noble(...)时返回的实例,但是可以通过遍历该对象来使Noble具有与macBindings相同的方法和功能,如下所述。

function Noble(arg) {
    for(var key in arg) {
        this[key] = arg[key];
    }
}



您可能需要稍微解决上述代码(更改范围或限制要复制的属性),并且可能无法100%满足您的情况,但这应该是一个不错的起点。

概括地说,您想要做的是构建自己的Noble版本,并实现与原始版本相同的方法和属性,可能会告知用户Noble已过时,应在特定日期删除,以便促进重构,以摆脱废弃的图书馆。

08-07 10:38