2017-09-28 4 views
1

だから私はJavaScriptのVMのためのFFIを書いている、と私はこのような状況を持っている:このようにバインドされた関数にアクセスしますか?

let myFunction = Function('console.log(this.toPrint);'); 
 
myFunction = myFunction.bind(myFunction); 
 
//any amount of time in the future 
 
myFunction.toPrint = "some value"; 
 
//further in the future 
 
myFunction(); 
 
//prints undefined but ideally would print "some value" because the bound function is not the function.

さて、私は引数としてそのバインドされた関数を渡すことができ、しかし、私が制御することはできません私が作成しているものの性質上、関数を呼び出すこと自体が呼び出されます。

bindを使用することはできませんが、関数内でarguments.calleeを使用することはできますが、これは推奨されていないものであり、推奨されなくなる可能性があります。これに他の選択肢はありますか?

答えて

3

すぐに結果Functionリターンあなたの代わりにしたい、実際の関数を使用して作成されている機能を確認し、およびコール:あなたの代わりに値を保存するためにスコープを使用することができ

let myFunction = Function('return function f() { console.log(f.toPrint); };')(); 
 
//any amount of time in the future 
 
myFunction.toPrint = "some value"; 
 
//further in the future 
 
myFunction(); 
 
//prints "some value"

1

this。たとえば、次のように

function factory() { 
 
    const params = {} 
 
    
 
    return { 
 
    setParam: (key, val) => { 
 
     params[key] = val 
 
    }, 
 
    printParam: (key) => { 
 
     console.log(params[key]) 
 
    }, 
 
    } 
 
} 
 

 
const x = factory() 
 
x.setParam('blah', 'something') 
 
x.printParam('blah')

関連する問題