当我将其名称作为字符串时如何执行私有JavaScript函数

yodaisgreen

我正在尝试从返回的对象内执行私有函数。如果我提前知道函数的名称,这很容易,但是在这种情况下,我将不知道可用的函数。我所拥有的是一个带有要调用的函数名称的字符串。有没有办法通过字符串调用这些函数?

function foo() {

  // some misc. chunk of valid javascipt code
  function bar() {
      console.log("hello");
  }
  // end misc. code

  // I would like to avoid doing this if I don't have to
  var executableFn = {};
  executableFn.test = function() {
    bar();
  }
  // end

  return {
    // This works but requires I know the name of the funciton ahead of time.
    // All I have is a string name of the function to call.
    funcRunner0: function() {
      bar();
    }, 
    // My ideal method for calling but does not work
    funcRunner1: function(functionName) {
      foo[functionName]();
    }, 
    // This works but I'm trying to avoid eval.  I'm not sure if this is not so bad
    funcRunner2: function(functionName) {
      var func = eval(functionName);
      func();
    },
    // This works.  I'm not sure if this is worse than funcRunner2 or the same;
    funcRunner3: function(functionName) {
      eval(functionName + "()");
    },
    // This works but requires the executableFn object which I would like to avoid if at all possible.
    funcRunner4: function(functionName) {
      executableFn[functionName]();
    }, 
  };
}

var bas = foo();

// This works but assumes I know the name of the function to call which I don't. 
bas.funcRunner0();
// This doesn't work
bas.funcRunner1("bar");
// This works
bas.funcRunner2("bar");
// This works
bas.funcRunner3("bar");
// This works but is not my ideal
bas.funcRunner4("test");

这些都是我想出的所有调用此函数的方法。您认为我用字符串调用bar函数的最佳方法是什么?感谢您的帮助。

贝吉

我理想的通话方法,但不起作用

foo[functionName]();

是的,正在尝试访问该foo函数的[public]属性例如,它将与该"call"方法一起使用

这可行,但我正在尝试避免评估。我不确定这是否还不错

var func = eval(functionName);
func();

这可行。我不确定这是否比funcRunner2或更糟。

eval(functionName + "()");

evals的角度来看,两者都一样糟糕选项1确实使使用参数[无需动态求值]更容易。

这可行,但是需要exec对象,如果可能的话,我想避免该对象。

exec[functionName]();

那只是做到这一点的方法。由于execfoo作用域中的局部变量,因此您甚至可以拥有自己的私密性。看来你已经切换execpublicObj

// I would like to avoid doing this if I don't have to
var publicObj = {};
publicObj.test = function() {
    bar();
}

publicObj变量,尽管它的名字,而不是公共-它声明的局部用var关键字!顺便说一句,您可以将其简化为

var exec = {
    test: bar
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java:当我将其名称作为字符串时如何返回对象?

来自分类Dev

将数据框作为函数参数传递,但在调用函数时将其名称用作字符串

来自分类Dev

通过 ICollection 属性使用其名称作为带有动态 Linq 库的字符串进行排序

来自分类Dev

使用其名称作为字符串来调用单独的Windows窗体

来自分类Dev

值名称作为赋值函数中的字符串

来自分类Dev

OCaml函数名称作为字符串

来自分类Dev

如何获取变量名称作为字符串?

来自分类Dev

如何依次执行节点js函数,这些函数使用其名称在字符串数组中动态列出

来自分类Dev

获取存储在变量中的字符串的值,其名称作为字符串存储在另一个变量中

来自分类Dev

如何使用shapeless在编译时获取case类字段的名称作为字符串/符号?

来自分类Dev

Python词典:执行时如何获取输入字符串并以字典名称作为字符串中的单词来定义动态词典

来自分类Dev

如何创建包含名称作为字符串和错误作为字典的字典

来自分类Dev

将函数参数名称作为字符串传递

来自分类Dev

角形名称作为参数传递时以字符串形式传递

来自分类Dev

通过名称作为字符串访问Java变量

来自分类Dev

获取对象名称作为字符串在PHP?

来自分类Dev

获取Swift变量的实际名称作为字符串

来自分类Dev

R +数据框名称作为字符串变量

来自分类Dev

使用属性名称作为字符串排序

来自分类Dev

反应元素名称作为字符串变量

来自分类Dev

获取对象属性名称作为字符串

来自分类Dev

将按钮名称作为字符串传递

来自分类Dev

按名称作为字符串引用 GUI 元素

来自分类Dev

无法通过名称作为字符串访问对象

来自分类Dev

如何使“ dplyr select”使用字符参数的值而不是其名称作为文字?

来自分类Dev

如何将早期绑定属性名称作为字符串常量?

来自分类Dev

如何将类型名称作为字符串嵌入到static_assert()中?

来自分类Dev

Func <DomainObject,object>如何将对象名称作为字符串返回

来自分类Dev

如何使用方法名称作为字符串调用方法

Related 相关文章

  1. 1

    Java:当我将其名称作为字符串时如何返回对象?

  2. 2

    将数据框作为函数参数传递,但在调用函数时将其名称用作字符串

  3. 3

    通过 ICollection 属性使用其名称作为带有动态 Linq 库的字符串进行排序

  4. 4

    使用其名称作为字符串来调用单独的Windows窗体

  5. 5

    值名称作为赋值函数中的字符串

  6. 6

    OCaml函数名称作为字符串

  7. 7

    如何获取变量名称作为字符串?

  8. 8

    如何依次执行节点js函数,这些函数使用其名称在字符串数组中动态列出

  9. 9

    获取存储在变量中的字符串的值,其名称作为字符串存储在另一个变量中

  10. 10

    如何使用shapeless在编译时获取case类字段的名称作为字符串/符号?

  11. 11

    Python词典:执行时如何获取输入字符串并以字典名称作为字符串中的单词来定义动态词典

  12. 12

    如何创建包含名称作为字符串和错误作为字典的字典

  13. 13

    将函数参数名称作为字符串传递

  14. 14

    角形名称作为参数传递时以字符串形式传递

  15. 15

    通过名称作为字符串访问Java变量

  16. 16

    获取对象名称作为字符串在PHP?

  17. 17

    获取Swift变量的实际名称作为字符串

  18. 18

    R +数据框名称作为字符串变量

  19. 19

    使用属性名称作为字符串排序

  20. 20

    反应元素名称作为字符串变量

  21. 21

    获取对象属性名称作为字符串

  22. 22

    将按钮名称作为字符串传递

  23. 23

    按名称作为字符串引用 GUI 元素

  24. 24

    无法通过名称作为字符串访问对象

  25. 25

    如何使“ dplyr select”使用字符参数的值而不是其名称作为文字?

  26. 26

    如何将早期绑定属性名称作为字符串常量?

  27. 27

    如何将类型名称作为字符串嵌入到static_assert()中?

  28. 28

    Func <DomainObject,object>如何将对象名称作为字符串返回

  29. 29

    如何使用方法名称作为字符串调用方法

热门标签

归档