我使用对象来命名空间我的
JavaScript代码.这些对象通常包含使用apply将该指针映射到对象本身的函数.但是,每次我想访问对象的其他函数或属性时,我觉得使用这个指针是不方便的,特别是因为在很多情况下,我使用new-operator来使用函数对象.如果新的this.Line(),我更喜欢写新的Line().
如果您可以将函数的局部变量添加到PHP与extract(伪代码以下,它有点复杂)
var sample_object = { "some_function": function() {} } test() { extract(sample_object); some_function(); // imported from sample_object }
甚至有可能吗
解决方法
我很确定eval是你唯一的答案但是您需要注意的是,如果您的控制范围内有任何输入,则不安全
function dynamicArgs (varName,varValue) { eval("var " + varName + "=" + JSON.encode(varValue) ); alert(a); } dynamicArgs("a","value");
你可以看到这个问题.如果你的函数不知道它的名字,你的函数应如何调用动态变量?我把它硬编码到一个变量,因为我通过它调用它,但这不是一个很好的解决方案.唯一的解决方案是另一个eval.你真的应该考虑你需要做什么,这是否有用.但它是可行的.
这里是在行动:http://jsfiddle.net/mendesjuan/GG3Wu/
function dynamicArgs (varName,varValue) { eval('var ' + varName + "='" + varValue + "';"); alert(eval(varName)); } dynamicArgs("f","Here I am");
现在这里是一个例子,就像你在做什么,从this.MyConstructor创建一个变量
http://jsfiddle.net/mendesjuan/AK3WD/
var ns = { MyConstructor: function(val) { this.prop = val; },runConstructor: function(val) { var Ctor = "MyConstructor"; eval('var ' + Ctor + ' = this.' + Ctor); return new MyConstructor(val); } } alert( ns.runConstructor("Hello").prop );
如果要将对象中的所有值导入范围,这里就是一个例子;
http://jsfiddle.net/mendesjuan/AK3WD/1/
var ns = { MyConstructor: function(val) { this.val= val; },anotherProperty: 5,runConstructor: function(val) { // Bring all the variables from this into this scope for (var prop in this) { eval('var ' + prop + ' = this.' + prop); } alert('Testing var anotherProperty: ' + anotherProperty); var obj = new MyConstructor(val); alert('Created MyConstructor: its prop is ' + obj.val) } } ns.runConstructor("Hello");