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

前端之家收集整理的这篇文章主要介绍了javascript – 您可以动态地将局部变量添加到函数中吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用对象来命名空间我的 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");

猜你在找的JavaScript相关文章