这可能吗?我正在创建一个单一的基本工厂函数来驱动不同类型的工厂(但有一些相似之处),我希望能够将参数作为数组传递给基本工厂,然后可能会创建一个新对象的实例来填充参数通过数组的相关类的构造函数。
在 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);
关于javascript - 在 JavaScript 中,如何使用参数值数组构造对象,而不是列出它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/813383/