2016-09-27 52 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