【问题标题】:create javascript new operator dynamically动态创建 javascript new 运算符
【发布时间】:2016-03-21 06:20:38
【问题描述】:

我的代码中有两个函数nameFuncOnenameFuncTwo

this.mainFunction = function() {
    this.someFunc = function() {
    return this.name;
  }
};

this.nameFuncOne = function() {
    this.name = "nameOne";
    mainFunction.call(this);
};
this.nameFuncTwo = function() {
    this.name = "nameTwo";
    mainFunction.call(this);
};
var one = new nameFuncOne();
var two = new nameFuncTwo();
console.log(one.someFunc() + "  " + two.someFunc());

所以我在这里所做的是将构造函数 nameFuncOnenameFuncTwo 分配给变量 onetwo。那为什么我不能创建这样的东西。

var funcArr = ["new nameFuncOne()", "new nameFuncTwo()"];
var arr = [];
for (var i=0;i<funcArr.length; i++) {
    arr[i] = funcArr[i];
  //console.log(arr[i].someFunc())
}

我的问题是我不想手动创建变量。有什么办法可以做到这一点。如果我错了,请纠正我。

【问题讨论】:

标签: javascript oop object


【解决方案1】:

是的,你可以这样做,但你的代码有问题。您将string 存储到数组中。

试试这个,

var funcArr = ["new nameFuncOne()", "new nameFuncTwo()"];
var arr = [];
for (var i=0;i<funcArr.length; i++) {
    arr[i] = eval(funcArr[i]);
     console.log(arr[i].someFunc())
}

eval() 函数评估表示为字符串的 JavaScript 代码。 LINK

另一种方式:

var funcArr = [new nameFuncOne(), new nameFuncTwo()];
    var arr = [];
    for (var i=0;i<funcArr.length; i++) {
        arr[i] = funcArr[i];
         console.log(arr[i].someFunc())
    }

【讨论】:

  • 是的 eval 是个坏主意,它会打开你的代码进行注入攻击。但是您将字符串存储在数组中,因此您必须执行它。
猜你喜欢
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 2020-01-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多