2016-09-27 51 views
0

我想克隆一个函数,但我需要删除原文。克隆一个函数然后删除它

let obj={}; 
obj.funct=function funct() { console.log('test');} 
let clone={}; 
clone.funct=obj.funct.bind({}); 
delete obj.funct 

但是该功能在两个对象中都被删除。

有什么想法?也许是ref或val的问题?

在此先感谢您的帮助。

+0

无法重现 - > https://jsfiddle.net/adeneo/pfpdxs4x/ – adeneo

+0

我在这里没有看到问题'obj.funct()'将有一个错误(*因为它被删除* )和'clone.funct()'很有效。 –

回答

0

我使用的是循环内,并且被克隆相同的参考对象,因此删除相同的var。

对不起,我的错误,并感谢您告诉我,代码正确运行。

ie:你可以添加你想要的所有-1。对不起

-1

当您将值传递给clone.funct时,您确实只是传递原始函数的引用。杀死原来的功能,参考文献就不了了之。断绝奇偶将字符串化的初始功能

的一种方式,然后用一个函数构造函数来创建克隆:

const obj={}; 
 
obj.funct=function funct(a,b) { console.log(a,b);} 
 
const clone={}; 
 
const functString = obj.funct.toString(); 
 
clone.funct= new Function('return (' + functString + ')(...arguments)'); 
 
delete obj.funct 
 

 
console.log('Original:',obj.funct) 
 
console.log('Cloned:',clone.funct) 
 
clone.funct('hello', 'there')

+1

嗯,这就是'bind'的作用,它会返回一个新的函数。 – adeneo

+0

好点,@ adeneo。忘记包装。再检查一遍。 :) – jmealy