【问题标题】:create variable name function [duplicate]创建变量名函数[重复]
【发布时间】:2012-11-20 17:32:52
【问题描述】:

可能重复:
Javascript dynamic variable name

我正在尝试在 javascript 中创建一个函数,其名称取决于变量。

例如:

var myFuncName = 'somethingWicked';
function myFuncName(){console.log('wicked');};
somethingWicked(); // consoles 'wicked'

我似乎想不出办法……我试图评估它,但是当我稍后尝试使用该函数时,它“不存在”……或者更确切地说是我得到一个函数未定义的 ReferenceError...

任何帮助将不胜感激。

【问题讨论】:

  • 这有有效的用例吗?
  • 下一个问题当然是“如何调用名称在变量中的函数?”
  • @MikeChristensen,你为什么需要一个有效的案例?
  • 我不知道,我只是好奇。如果你在调用中硬编码,你不妨在函数定义中硬编码。

标签: javascript function variables


【解决方案1】:

您可以将您的函数分配给一个对象并像这样引用它们:

var funcs = {};
var myFuncName = 'somethingWicked';
funcs[myFuncName] = function(){console.log('wicked');};
funcs.somethingWicked(); // consoles 'wicked'

或者,您可以将它们保留为全局变量,但您仍然必须通过 window 对象分配它们:

var myFuncName = 'somethingWicked';
window[myFuncName] = function(){console.log('wicked');};
somethingWicked(); // consoles 'wicked'

【讨论】:

  • 我不认为这可以解决,因为funcs.somethingWicked.name == ""
  • 解决办法应该是这样的:var myFuncName = 'somethingWicked'; var funcs = { [myFuncName]: function(){console.log('wicked');} }; funcs.somethingWicked(); // consoles 'wicked' console.log(funcs.somethingWicked.name); // consoles 'somethingWicked'
【解决方案2】:
var myFuncName = 'somethingWicked';
window[myFuncName] = function(){console.log('wicked');};
somethingWicked(); // consoles 'wicked'

【讨论】:

    【解决方案3】:

    任何时候您必须为变量创建依赖于动态名称的东西,您应该改用对象的属性或数组成员。

    var myRelatedFunctions = {};
    var myFuncName = 'somethingWicked';
    myRelatedFunctions[myFuncName] = function (){console.log('wicked');};
    myRelatedFunctions['somethingWicked']()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 2013-03-26
      • 1970-01-01
      • 2019-06-10
      相关资源
      最近更新 更多