用.在[]中输入新范围

1 javascript

让我试着解释一下,我有一个像这样的字符串:

"b.c"
Run Code Online (Sandbox Code Playgroud)

和这样的对象:

a = {
    b:{
        c:2
    }
}
Run Code Online (Sandbox Code Playgroud)

我想使用该字符串来获取c属性,但使用它不起作用:

a["b.c"]
Run Code Online (Sandbox Code Playgroud)

我怎样才能使用"b.c"字符串来工作a.b.c?(不使用eval,性能在我的情况下很重要)

Rex*_*x M 6

这样的事情怎么样:

function load(path) {
    var steps = path.split('.');
    var level = this;
    for(var i=0;i<steps.length;i++) {
        level = level[steps[i]];
    }
    return level;
};

var value = load(a, 'b.c');
Run Code Online (Sandbox Code Playgroud)

  • 增加`Object.prototype`对象实际上并不是一个好主意,几乎所有对象(包括DOM元素等宿主对象)都从它继承,例如,如果在对象上使用`for-in`语句,继承的`load`属性将被枚举,例如:`for(var p in {})alert(p);`.它也可能导致其他库出现问题,请使用jQuery和您的函数检查[此示例](http://jsbin.com/awalu3/2/edit).为什么不像`function load(obj,path){`?这样的简单函数? (5认同)