首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS:深拷贝函数

NodeJS:深拷贝函数
EN

Stack Overflow用户
提问于 2016-06-04 23:52:42
回答 3查看 1.2K关注 0票数 3

可以在NodeJS中深入复制函数对象吗?我正在尝试使用我设置了字段的函数,但我需要一种复制该函数的方法,以便当我复制它时,我可以单独修改这些额外的字段。

例如:

代码语言:javascript
复制
let a = function(){console.log('hello world')}
a.__var = 1
let b = clone(a)
a.__var // 1
b.__val // 1
b.__var = 2
a.__var // 1

我尝试过使用下划线/存档,但它们似乎将函数转换为克隆中的一个对象。在前面的示例中,b最终将成为{ __var: 1 }。我需要能够对这个函数执行一次深入的复制。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-05 01:05:39

我使用过的另一种方法是.bind()函数(它生成函数的副本),但不绑定任何实际的参数。如果函数上有静态方法/属性,则可以使用Object.assign复制这些方法/属性。我这样做的用例是对全局Notification构造函数进行抖动。示例:

代码语言:javascript
复制
// copy the constructor
var NotifConstructor = Notification.bind(Notification);
//assign on static methods and props
var ShimmedNotif = Object.assign(function (title, _opts) { /* impl here that returns NotifConstructor */ }, Notification);
//now you can call it just like you would Notification (and Notification isn't clobbered)
new ShimmedNotif('test');

对于更简单的用例,bind可能会起作用,例如:

代码语言:javascript
复制
function hi(name) { console.log('hey ' + name); }
var newHi = hi.bind();
newHi('you'); //=> 'hey you'
票数 2
EN

Stack Overflow用户

发布于 2016-06-05 00:38:26

通过执行以下操作,我能够实现所需的功能:

代码语言:javascript
复制
let a = function (){console.log('hello world')}
a.field = 'value'

// Wrap the "cloned" function in a outer function so that fields on the
// outer function don't mutate those of the inner function
let b = function() { return a.call(this, ...arguments) }

b.field = 'different value'
console.log(a.field === b.field) // false
票数 1
EN

Stack Overflow用户

发布于 2016-06-05 07:44:18

使用.assign(dest,src)

代码语言:javascript
复制
let a = function(){console.log('hello world')}
a.__var = 1

然后..。

代码语言:javascript
复制
let b = () => 42;
_.assign(b,a);
b.__var // returns 1
b() // returns 42
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37636144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档