除了使用 'eval' 按名称访问变量以使用另一个变量 "sync" 之外,有什么替代方法?

What is an alternative to using 'eval' to accessing a variable by name to "sync" it with another?

我想在 运行 一个函数时保持两个 JavaScript 变量同步。要指向的变量在对象中。到目前为止我的代码是这样的:

var myname = "bob";
var thevar = "";
var varobj = {tvar: "myname"};
var syncvar = function() {
    thevar = eval(varobj.tvar);
};

syncvar();
alert(thevar); // bob
myname = "eve";
syncvar();
alert(thevar); // eve

如何在不使用可怕的 eval 的情况下做类似的事情?请记住,我希望此功能具有通用性,即我希望它适用于任何人的对象。

提前致谢。

澄清编辑:这是客户端。我本质上想要一个 "pointer" 到另一个变量的变量(可能不是严格定义意义上的)。我做了一个可以同步变量的函数,但它使用 eval,这让我持怀疑态度。 "universal" 部分是我可以让 tvar 指向任何可以同步它的东西。例如,如果你包含上面的代码,那么你可以:

myage = 20;
varobj = {tvar: "myage"};
syncvar(); 
alert(thevar); // 20
myage = 100;
syncvar();
alert(thevar); // 100

因此使它 "universal" 成为 varobj.tvar 可以 "point" 任何东西以保持同步。

您可以使用 setter 和 getter 在名为 thevar 的 window 上创建 "virtual" 属性,镜像 varobj.tvar:

Object.defineProperty(window, 'thevar', {
    get: function( ) { return window[varobj.tvar]    ; },
    set: function(v) {        window[varobj.tvar] = v; }
});

> varobj = { tvar: "bob" }
> thevar = 1
> bob
< 1

你是否真的想这样做完全是另一个问题。