在JavaScript中将string转换为variables名称

我寻找解决scheme,但找不到任何工作。

我有一个variables叫onlyVideo

"onlyVideo"string被传入一个函数。 我想在函数内部设置variablesonlyVideo 。 我怎样才能做到这一点?

(有很多variables可以调用到函数中,所以我需要dynamic工作,而不是硬编码的语句。)

编辑:可能有更好的方式做你想做的事情。 我在JavaScript冒险中很早就提出了这个问题。 看看JavaScript对象是如何工作的。

一个简单的介绍:

 // create JavaScript object var obj = { "key1": 1 }; // assign - set "key2" to 2 obj.key2 = 2; // read values obj.key1 === 1; obj.key2 === 2; // read values with a string, same result as above // but works with special characters and spaces // and of course variables obj["key1"] === 1; obj["key2"] === 2; // read with a variable var key1Str = "key1"; obj[key1Str] === 1; 

如果它是一个全局variables,那么window[variableName]或在你的情况window["onlyVideo"]应该做的伎俩。

JavaScript有这样的场合eval()函数:

 function (varString) { var myVar = eval(varString); // ..... } 

编辑:对不起,我想我很快就剔除了这个问题。 这只会让你variables,设置你需要的

 function SetTo5(varString) { var newValue = 5; eval(varString + " = " + newValue); } 

或者如果使用一个string:

 function SetToString(varString) { var newValue = "string"; eval(varString + " = " + "'" + newValue + "'"); } 

但我想有一个更合适的方式来完成你要找的东西? 我不认为eval()是你真正想使用的东西,除非有很好的理由。 的eval()

至于评估与全球可变的解决scheme…

我认为每个人都有优势,但这实际上是一种错误的二元对立。 如果你是偏执性的全局命名空间,只需创build一个临时命名空间并使用相同的技术。

 var tempNamespace = {}; var myString = "myVarProperty"; tempNamespace[myString] = 5; 

相当肯定你可以然后访问tempNamespace.myVarProperty(现在5),避免使用窗口的存储。 (string也可以直接放在括号内)

 var myString = "echoHello"; window[myString] = function() { alert("Hello!"); } echoHello(); 

邪恶的评论说不。 示例: http : //fiddle.jshell.net/Shaz/WmA8t/

您可以将该窗口对象作为关联数组访问并设置

 window["onlyVideo"] = "TEST"; document.write(onlyVideo); 

如果variables是在全局范围内定义的,window ['variableName']方法只能工作。 正确的答案是“重构”。 如果你可以提供一个“对象”上下文,那么可能存在一个通用的解决scheme,但是有一些variables,没有全局函数可以根据variables的范围来解决。

 (function(){ var findMe = 'no way'; })(); 

如果你试图访问一个对象的属性,你必须从window的范围开始,遍历对象的每个属性,直到find你想要的对象。 假定在脚本的其他地方已经定义了abc ,可以使用下面的代码:

 var values = window; var str = 'abc'.value.split('.'); for(var i=0; i < str.length; i++) values = values[str[i]]; 

这将有助于获得任何物体的财产,无论它有多深。

可以这样做

 (function(X, Y) { // X is the local name of the 'class' // Doo is default value if param X is empty var X = (typeof X == 'string') ? X: 'Doo'; var Y = (typeof Y == 'string') ? Y: 'doo'; // this refers to the local X defined above this[X] = function(doo) { // object variable this.doo = doo || 'doo it'; } // prototypal inheritance for methods // defined by another this[X].prototype[Y] = function() { return this.doo || 'doo'; }; // make X global window[X] = this[X]; }('Dooa', 'dooa')); // give the names here // test doo = new Dooa('abc'); doo2 = new Dooa('def'); console.log(doo.dooa()); console.log(doo2.dooa());