Javascript 是否可以更改用new调用的函数的返回类型

Javascript 是否可以更改用new调用的函数的返回类型,javascript,Javascript,我必须为另一个废弃的npm库编写一个垫片 其他人将使用new关键字调用此库。其他人就是这样做的: const Noble = require('noble/lib/noble'); var nobleInstance = new Noble(macBindings); module.exports = nobleInstance; 现在我编写了一个垫片,它通过require('noble/lib/noble')更改导入的内容。为了让事情变得更好我想改变什么 new Noble(macBindi

我必须为另一个废弃的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');
我将实际获得我自己的返回值

为此,我需要更改
newnoble(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
已被弃用,应在某个日期前删除,为了促进从废弃的库中移出的重构。

然后只需执行
var nobleInstance=macBindings
我无法控制该代码。我正在填充
Noble
,但我无法改变调用
Noble
的方式或分配
nobleInstance
的方式。这个想法真是太棒了!非常感谢。