javascript用new函数构造的函数不能调用其他函数

时间:2016-07-17 22:39:20

标签: javascript global-variables ecmascript-6

在android上使用React-native。但是,我认为我的问题适用于任何JavaScript环境。

我正在从服务器发送的文本构建一个函数(有充分的理由)。

function helper_called_from_dynamic (arg1)
{
  console.log('helper called ',arg1);
}

export class MyInvoker
{
  constructor ()
  {
    this._funcProps={};
  }

  initialize ( item )
  {
    this._funcProps["df1"]=new Function (["inArg1"],item.fnBody);
  }

  call_dynamic_func (fnName,arg1)
  { 
    return this._funcProps[fnName](arg1);
  }
}

fnBody有以下几点: " return helper_called_from_dynamic(inArg1); "

我通过My​​Invoker的调用如下

let invInst = new MyInvoker();
let item={fnBody:"return helper_called_from_dynamic(inArg1); "};
invInst.initialize(item);
invInst.call_dynamic_func("df1","somearg");

我收到错误(来自react-native,但同样,我怀疑它会在所有其他JavaScript环境中出现):

  

无法找到变量:helper_called_from_dynamic

是否有可能让它发挥作用?那是允许动态创建的函数调用其他函数? 或者我必须诉诸“eval' ?

1 个答案:

答案 0 :(得分:1)

@Bergi暗示的解决方案为我工作。 建议

  

使经过验证的代码只调用参数方法

是我做过的,而且有效。在发布之前我应该​​考虑一下,但当时没有发生过。 我没有将辅助函数设置为全局,而是将其附加到类的实例,并将该实例作为参数传递给动态函数。

以下是详细信息

export class MyHelpers
{
 helper_called_from_dynamic (arg1)
 {
   console.log('helper called ',arg1);
 }
}

export class MyInvoker
{
  constructor ()
  {
    this._funcProps={};
    this._myHelpers=new MyHelpers();
  }

  initialize ( item )
  {
    this._funcProps["df1"]=new Function (["inArg1","iHelper"],item.fnBody);
  }

  call_dynamic_func (fnName,arg1)
  { 
    return this._funcProps[fnName](arg1,this._myHelpers);
  }
}

然后动态函数的主体现在可以访问helper_called_from_dynamic:

let invInst = new MyInvoker();
let item={fnBody:"return iHelper.helper_called_from_dynamic(inArg1); "};
invInst.initialize(item);
invInst.call_dynamic_func("df1","somearg");