这样访问绑定函数?

时间:2017-09-28 05:45:22

标签: javascript

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

2 个答案:

答案 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')