javascript – 您可以动态地将局部变量添加到函数中吗?

前端之家收集整理的这篇文章主要介绍了javascript – 您可以动态地将局部变量添加到函数中吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用对象来命名空间我的 JavaScript代码.这些对象通常包含使用apply将该指针映射到对象本身的函数.但是,每次我想访问对象的其他函数属性时,我觉得使用这个指针是不方便的,特别是因为在很多情况下,我使用new-operator来使用函数对象.如果新的this.Line(),我更喜欢写新的Line().

如果您可以将函数的局部变量添加PHP与extract(伪代码以下,它有点复杂)

  1. var sample_object = {
  2. "some_function": function() {}
  3. }
  4.  
  5. test() {
  6. extract(sample_object);
  7. some_function(); // imported from sample_object
  8. }

甚至有可能吗

解决方法

我很确定eval是你唯一的答案但是您需要注意的是,如果您的控制范围内有任何输入,则不安全
  1. function dynamicArgs (varName,varValue) {
  2. eval("var " + varName + "=" + JSON.encode(varValue) );
  3. alert(a);
  4. }
  5.  
  6. dynamicArgs("a","value");

你可以看到这个问题.如果你的函数不知道它的名字,你的函数应如何调用动态变量?我把它硬编码到一个变量,因为我通过它调用它,但这不是一个很好的解决方案.唯一的解决方案是另一个eval.你真的应该考虑你需要做什么,这是否有用.但它是可行的.

这里是在行动:http://jsfiddle.net/mendesjuan/GG3Wu/

  1. function dynamicArgs (varName,varValue) {
  2. eval('var ' + varName + "='" + varValue + "';");
  3. alert(eval(varName));
  4. }
  5.  
  6. dynamicArgs("f","Here I am");

现在这里是一个例子,就像你在做什么,从this.MyConstructor创建一个变量
http://jsfiddle.net/mendesjuan/AK3WD/

  1. var ns = {
  2. MyConstructor: function(val) {
  3. this.prop = val;
  4. },runConstructor: function(val) {
  5. var Ctor = "MyConstructor";
  6. eval('var ' + Ctor + ' = this.' + Ctor);
  7. return new MyConstructor(val);
  8. }
  9. }
  10.  
  11.  
  12. alert( ns.runConstructor("Hello").prop );

如果要将对象中的所有值导入范围,这里就是一个例子;

http://jsfiddle.net/mendesjuan/AK3WD/1/

  1. var ns = {
  2. MyConstructor: function(val) {
  3. this.val= val;
  4. },anotherProperty: 5,runConstructor: function(val) {
  5. // Bring all the variables from this into this scope
  6. for (var prop in this) {
  7. eval('var ' + prop + ' = this.' + prop);
  8. }
  9. alert('Testing var anotherProperty: ' + anotherProperty);
  10. var obj = new MyConstructor(val);
  11. alert('Created MyConstructor: its prop is ' + obj.val)
  12. }
  13. }
  14.  
  15.  
  16. ns.runConstructor("Hello");

猜你在找的JavaScript相关文章