我需要使用arguments数组创建一个新的View实例。因为我不想打电话
new View(array)
我试过了this solution。但不幸的是,这不起作用,这意味着没有arg传递给initialize函数。那么创建一个新的View传递给一个数组但是在initialize函数中只有一次参数吗?
答案 0 :(得分:2)
您可以通过一些原型技巧来实现这一目标:
function createView() {
var args = arguments;
//create a factory function, so we can get the "this" context
function Factory() { return YourViewClass.apply(this, args);}
//assign factory prototype (essentially makes factory a YourViewClass)
Factory.prototype = YourViewClass.prototype;
//invoke factory function
return new Factory();
};
var view1 = createView({model:model}, 1, 2, 3);
var view2 = createView.apply(null, argumentArray);
使用可变参数实例化任何“类”(构造函数)的一般解决方案:
function instantiate(ctor) {
//strip first arg, pass rest as arguments to constructor
var args = Array.prototype.slice.call(arguments, 1);
function Factory() { return ctor.apply(this, args);}
Factory.prototype = ctor.prototype;
return new Factory();
};
//call directly
var view1 = instantiate(YourViewClass, {model:model}, 1, 2, 3);
//partially apply to create a factory for a specific view class
var viewFactory = _.partial(instantiate, YourViewClass);
var view2 = viewFactory({model:model}, 1, 2, 3);