我必须为另一个废弃的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);
我希望
nobleInstance
是macBindings
。 最佳答案
据我所知,您不能替换调用new Noble(...)
时返回的实例,但是可以通过遍历该对象来使Noble
具有与macBindings
相同的方法和功能,如下所述。
function Noble(arg) {
for(var key in arg) {
this[key] = arg[key];
}
}
您可能需要稍微解决上述代码(更改范围或限制要复制的属性),并且可能无法100%满足您的情况,但这应该是一个不错的起点。
概括地说,您想要做的是构建自己的
Noble
版本,并实现与原始版本相同的方法和属性,可能会告知用户Noble
已过时,应在特定日期删除,以便促进重构,以摆脱废弃的图书馆。