2

当我有一个对象时:

var YayanObject = function(var1, var2, var208) {
    this.var1 = var1;
    this.functiony = function() {
        More Functiony stuff :)
    }
    Do stuff :D
}

我想用 2 个变量来调用它:

var1 = "YayanObject";
var2 = [1,"2","Hello world"];

我想调用对象:

window[var1](????);

问号怎么填?

4

2 回答 2

1

如果我理解正确, var2 包含函数的参数,是吗?

在这种情况下,像这样:

window[var1].apply(this, var2);
于 2013-10-12T17:12:06.553 回答
1

你可以使用apply

fun.apply(thisArg[, argsArray]):
  • thisArgthis为调用提供的值fun。注意,这可能不是方法看到的实际值:如果方法是非严格模式代码中的函数,nullundefined被替换为全局对象,原始值将被装箱。
  • argsArray:一个类似数组的对象,指定fun应该调用的参数,null或者undefined是否不应该向函数提供参数。

请注意,如果您不使用严格模式,则声明变量而不var使它们成为全局变量,因此您可以将其用作以下属性window

var1 = "YayanObject";
var2 = [1,"2","Hello world"];
window[var1].apply(null, var2); /* Instead of `null` you can use the object
                                   you want to become `this` */

但我建议您存储var1对构造函数的引用而不是字符串:

var var1 = YayanObject,
    var2 = [1,"2","Hello world"];
var1.apply(null, var2);
于 2013-10-12T17:18:16.023 回答