所以我正在为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,但我知道这不是一个好习惯,可能会被弃用。还有其他替代方案吗?
答案 0 :(得分: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 :(得分: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')