JS运行函数在多个dim对象失败.不确定这是否可能

JS run function with in multi dim object failing.. not sure if this is even posisble

本文关键字:不确定 失败 是否 对象 dim 函数 运行 JS      更新时间:2023-09-26

好的,我有一个html元素的属性:data-content='from:function:project101.login.check'

我想能够运行的功能在于project101.login.check.

但是我写的js我不确定我怎么能做到这一点。

目前js得到字符串,但不能运行它。

http://jsfiddle.net/3M7hC/

html

<a href="some href" data-loader data-content='from:function:project101.login.check' >target</a>

JS

var project101 = {
    login: {
        check: function(){
            alert('function hit!');
        }
    }
}

$('*[data-loader]').click(function(e){
    e.preventDefault();
        var contentParams = $(this).attr('data-content').split(':');
        console.log( contentParams );
        switch( contentParams[0] ){
            case 'from':
                switch( contentParams[1] ){
                    case 'function':
                        contentParams[2]();
                    break;
                }
        }
});

不使用eval,您可以在.上拆分字符串并向下钻取对象,直到找到所需的位置。

function getObjFromPath(path, context){
    var obj = context || window,
        pathArray = path.split('.');
    for(var i = 0; i < pathArray.length; i++){
        obj = obj[pathArray[i]];
    }
    return obj;
}

然后调用函数:

var func = getObjFromPath(contentParams[2]);
func();

演示:http://jsfiddle.net/SyFWh/

你可以这样使用

eval(contentParams[2])();

作为你在contentParams[2]中得到的只是一个字符串,而不是一个函数对象。因此,eval(..)将其计算为js函数,最终可以调用