这可能吗?我正在创建一个基础工厂函数来驱动不同类型的工厂(但有一些相似之处),并且我希望能够将参数作为数组传递给基础工厂,然后基础工厂可能会创建一个新对象的实例来填充参数通过数组相关类的构造函数。

在JavaScript中,可以使用apply方法使用数组来调用具有多个参数的函数:

namespace.myFunc = function(arg1, arg2) { //do something; }
var result = namespace.myFunc("arg1","arg2");
//this is the same as above:
var r = [ "arg1","arg2" ];
var result = myFunc.apply(namespace, r);

似乎并没有使用apply创建对象实例的想法,是吗?

类似的东西(这不起作用):
var instance = new MyClass.apply(namespace, r);

最佳答案

试试这个:

var instance = {};
MyClass.apply( instance, r);

关键字“new”所做的所有操作都是将新对象传递给构造函数,该构造函数随后在构造函数中成为this变量。

根据构造函数的编写方式,您可能必须执行以下操作:
var instance = {};
var returned = MyClass.apply( instance, args);
if( returned != null) {
    instance = returned;
}

更新:评论说如果有原型(prototype),这是行不通的。试试这个。
function newApply(class, args) {
    function F() {
        return class.apply(this, args);
    }
    F.prototype = class.prototype;
    return new F();
}

newApply( MyClass, args);

10-01 19:38
查看更多