2016-09-27 1 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を削除します。

ご迷惑をおかけして申し訳ありませんが、コードが正しく動作することを私に見せていただきありがとうございます。

:つまり、-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

Uhm、それは 'bind'のことです、それは新しい関数を返します。 – adeneo

+0

良い点、@adeneo。ラッパーを忘れた。もう一度チェック。 :) – jmealy

関連する問題