suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Javascript有没有动态执行函数的方法(函数名字动态)

需求是我根据点击元素的ID执行对应ID名称的函数初始化方法。我之所以用动态的原因是作为前端角色,我不知道每个ID是什么。(实际上我是知道了)

1

2

3

4

5

6

7

8

<code>var oId;

$('#btn').click(function () {

    oId = $('xxx').attr('id');

    //具体实现不重要

    // oId 的具体格式是 [id]-[时间戳]

    var arr = oId.split('-');

    eval(arr[0]+".init()");

});</code>

是否有其他的方法来解决?(并不排斥 eval函数 )

补充:
以防一些朋友不明白。
就是一般我们调用函数方法如下: func.init(); 调用 func 方法的 init(); 现在我需要 func 这个是动态的,变成xxx.init();

最终方案:
有助于关注问题的朋友知道。

1

2

3

4

5

6

7

8

9

10

11

12

13

<code>var oId;

$('#btn').click(function () {

    oId = $('xxx').attr('id');

    //具体实现不重要

    // oId 的具体格式是 [id]-[时间戳]

    var arr = oId.split('-');

     

    // 解决方法如下

    var fn = window[arr[0]];

    if( fn && fn.init ) {

        fn.init();

    }

});</code>

高洛峰高洛峰2850 Tage vor676

Antworte allen(8)Ich werde antworten

  • 高洛峰

    高洛峰2017-04-11 11:49:57

    假设你的方法是全局的

    1

    <code>window[a[0]]['init']()</code>

    Antwort
    0
  • PHPz

    PHPz2017-04-11 11:49:57

    把所有可能的值都放到一个对象中。然后根据id中获得的前缀得到对于的对象,运行对象的init方法。举例:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    <code class="javascript">var allFns = {

        data: {},

        add: function(name, obj) {

            this.data[name] = obj;

        },

        query: function(name) {

            return this.data[name];

        };

    var fn1 = {

        init: function(){

            console.log('fn1 init');

        }

    };

    allFns.add('fn1', fn1);

    var fn2 = {

        init: function() {

            console.log('fn2 init');

        }

    }

    allFns.add('fn2', fn2);

     

    // oId 表示从DOM中取到的oId

    allFns.query(oId).init();</code>

    像上面的例子这样,将所有oId的可能情况放到一个对象中管理,就可以实现你要的功能。这种写法有一个名字,叫做工程方法模式。有兴趣可以去网上了解下细节。

    Antwort
    0
  • 迷茫

    迷茫2017-04-11 11:49:57

    没get到你的点。。。怎么就需要函数名字动态了。。。

    Antwort
    0
  • 天蓬老师

    天蓬老师2017-04-11 11:49:57

    不知道jq trigger方法能不能实现你需求

    Antwort
    0
  • 巴扎黑

    巴扎黑2017-04-11 11:49:57

    你去看看 事件委托 就明白了

    Antwort
    0
  • PHPz

    PHPz2017-04-11 11:49:57

    把要调用的方法集放进一个对象里
    比如

    1

    2

    3

    4

    <code>var functionList = {

        'aaa':function(){},

        'bbb':function(){}

    };</code>

    调用

    1

    2

    <code>var name = 'aaa';

    functionList[name]();</code>

    Antwort
    0
  • 黄舟

    黄舟2017-04-11 11:49:57

    你需要的是eval

    Antwort
    0
  • PHPz

    PHPz2017-04-11 11:49:57

    js支持函数式编程

    Antwort
    0
  • StornierenAntwort