首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Javascript中调用动态命名的方法?

如何在Javascript中调用动态命名的方法?
EN

Stack Overflow用户
提问于 2009-06-09 12:18:56
回答 12查看 149.3K关注 0票数 129

我正在努力动态创建一些JavaScript,它将被插入到正在构建的网页中。

该JavaScript将用于根据在另一个listbox中选择的内容填充listbox。当一个listbox的选择发生变化时,它将根据listbox的选定值调用一个方法名。

例如:

Listbox1包含:

  • Colours
  • Shapes

如果选择了Colours,那么它将调用一个填充另一个listboxpopulate_Colours方法。

为了澄清我的问题:如何在JavaScript中调用populate_Colours

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-06-09 12:22:03

假设populate_Colours方法位于全局命名空间中,您可以使用以下代码,该代码既利用了可以像访问关联数组一样访问所有对象属性,又利用了所有全局对象实际上都是window宿主对象的属性。

代码语言:javascript
复制
var method_name = "Colours";
var method_prefix = "populate_";

// Call function:
window[method_prefix + method_name](arg1, arg2);
票数 226
EN

Stack Overflow用户

发布于 2009-06-09 12:51:28

正如Triptych所指出的,您可以通过在宿主对象的内容中找到任何全局作用域函数来调用它。

一种更简洁的方法,它对全局名称空间的污染要小得多,就是显式地将函数直接放入一个数组中,如下所示:

代码语言:javascript
复制
var dyn_functions = [];
dyn_functions['populate_Colours'] = function (arg1, arg2) { 
                // function body
           };
dyn_functions['populate_Shapes'] = function (arg1, arg2) { 
                // function body
           };
// calling one of the functions
var result = dyn_functions['populate_Shapes'](1, 2);
// this works as well due to the similarity between arrays and objects
var result2 = dyn_functions.populate_Shapes(1, 2);

这个数组也可以是全局主机对象以外的某个对象的属性,这意味着您可以像许多JS库(如jQuery )一样有效地创建自己的名称空间。如果在同一页面中包含多个单独的实用程序库,并且(设计的其他部分允许)可以更容易地在其他页面中重用代码,这将有助于减少冲突。

你也可以像这样使用一个对象,你可能会发现它更干净:

代码语言:javascript
复制
var dyn_functions = {};
dyn_functions.populate_Colours = function (arg1, arg2) { 
                // function body
           };
dyn_functions['populate_Shapes'] = function (arg1, arg2) { 
                // function body
           };
// calling one of the functions
var result = dyn_functions.populate_Shapes(1, 2);
// this works as well due to the similarity between arrays and objects
var result2 = dyn_functions['populate_Shapes'](1, 2);

请注意,使用数组或对象,您都可以使用设置或访问函数的方法,当然也可以在其中存储其他对象。您可以通过使用JS文字表示法进一步减少非动态内容的任何方法的语法,如下所示:

代码语言:javascript
复制
var dyn_functions = {
           populate_Colours:function (arg1, arg2) { 
                // function body
           };
         , populate_Shapes:function (arg1, arg2) { 
                // function body
           };
};

编辑:当然,对于更大的功能块,您可以将上面的扩展到非常常见的“模块模式”,这是一种以有组织的方式封装代码特性的流行方式。

票数 46
EN

Stack Overflow用户

发布于 2018-01-20 17:26:25

为此,我建议使用而不是来使用global / window / eval

相反,可以这样做:

将所有方法定义为Handler的属性:

代码语言:javascript
复制
var Handler={};

Handler.application_run = function (name) {
console.log(name)
}

现在这样叫它

代码语言:javascript
复制
var somefunc = "application_run";
Handler[somefunc]('jerry');

输出: jerry

从不同文件导入函数时的情况

代码语言:javascript
复制
import { func1, func2 } from "../utility";

const Handler= {
  func1,
  func2
};

Handler["func1"]("sic mundus");
Handler["func2"]("creatus est");
票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/969743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档