eval
まったく使用せずに簡単に実行できます。
function getValue(path) {
var target = this;
path.split('.').forEach(function (branch) {
if (typeof target === "undefined") return;
target = (typeof target[branch] === "undefined") ? undefined : target[branch];
});
return target;
}
から始まるプロパティを取得したい場合は、 をwindow
呼び出すだけgetValue("path.to.property")
です。他のルート オブジェクトから開始する場合は、 を使用しますgetValue.call(rootObject, "path.to.property")
。
この関数は、オプションの最初のパラメーターとしてルート オブジェクトを取得するように適合させることもできますが、考え方は同じままです。
実際に見てください。
重要:これは Internet Explorer < 9 では動作しArray.prototype.forEach
ません。あなたはそれを修正することができます
if (!Array.prototype.forEach) {
Array.prototype.forEach = function(fun /*, thisPointer */) {
var len = this.length;
if (typeof fun != "function") throw new TypeError();
var thisPointer = arguments[1];
for (var i = 0; i < len; i++) {
if (i in this) {
fun.call(thisPointer, this[i], i, this);
}
}
};
}