获取变量的值,其名称与字符串的值相同

时间:2016-02-03 11:14:58

标签: javascript jquery variables eval

我有一个jQuery小部件,在调用时会输出一个目录。

我想让用户有机会在内容中指定每个单独元素的ID(默认情况下为listElementID: 'contents-{index}'),因此我在小部件中提出了一个功能实现这一目标。

这方面的标准非常简单 -

  1. {index}替换为传递给该函数的index参数的值。
  2. 使用匹配的小部件选项{.*}替换{whatever}(即this.options.whatever的其他实例。
  3. 我可以从this.options.listElementID中提取所需的变量,但我似乎无法找到一种方法来获取匹配参数/选项的值。

    我已尝试使用eval()执行此操作(抱歉!),但如果例如varName = 'index';,则eval('varName');只返回索引,而不是index参数的值。

    如何更正我的代码?

    _getContnetsLineID : function(index){
    
        var vars = (this.options.listElementID.match(/{.*}/g) || []),
            ID = this.options.listElementID;
    
        for(var i = 0; i < vars.length; i++){
    
            var varName,    // The name of the variable to grab the value from
                value;      // The value to replace the placehoder with
    
            varName = vars[i].replace('{', '').replace('}', '');    // Remove the '{' and '}' characters from the 'varName'
    
            if(varName == 'index'){ // Attempt to grab the value from a variable that matches the string 'varName'
                value = eval('varName');    
            } else {
                value = eval('this.options.varName');
            }
    
            ID = ID.replace(vars[i], value);    // Replace the placeholder with the appropriate value
    
        }
    
        return ID;
    
    } // _getContnetsLineID
    

1 个答案:

答案 0 :(得分:2)

考虑:

this.options = {
    listElementID: "foobar-{index}-{whatever}",
    whatever: "hi"
};

_getLineID = function (index) {
    return this.options.listElementID.replace(/{(.+?)}/g, function (_, name) {
        return name === 'index' ? index : this.options[name];
    });
}

document.write(_getLineID(25));