Javascript有没有动态执行函数的方法(函数名字动态)
高洛峰
高洛峰 2017-04-11 11:47:57
0
8
644

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

var oId;
$('#btn').click(function () {
    oId = $('xxx').attr('id');
    //具体实现不重要
    // oId 的具体格式是 [id]-[时间戳]
    var arr = oId.split('-');
    eval(arr[0]+".init()");
});

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

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

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

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();
    }
});
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(8)
小葫芦

假设你的方法是全局的

window[a[0]]['init']()
いいねを押す +0
PHPzhong

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

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();

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

いいねを押す +0
迷茫

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

いいねを押す +0
Peter_Zhu

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

いいねを押す +0
巴扎黑

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

いいねを押す +0
PHPzhong

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

var functionList = {
    'aaa':function(){},
    'bbb':function(){}
};

调用

var name = 'aaa';
functionList[name]();
いいねを押す +0
黄舟

你需要的是eval

いいねを押す +0
PHPzhong

js支持函数式编程

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート