Bjo*_*orn 11 javascript oop firefox-addon apply new-operator
这可能吗?我正在创建一个基本工厂函数来驱动不同类型的工厂(但有一些相似之处),我希望能够将参数作为数组传递给基础工厂,然后可能会创建一个填充参数的新对象的实例.通过数组的相关类的构造函数.
在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);
Run Code Online (Sandbox Code Playgroud)
看起来好像无论如何使用apply创建一个对象的实例,是吗?
像(这不起作用):
var instance = new MyClass.apply(namespace, r);
Run Code Online (Sandbox Code Playgroud)
Joh*_*ohn 15
试试这个:
var instance = {};
MyClass.apply( instance, r);
Run Code Online (Sandbox Code Playgroud)
所有关键字"new"都会将新对象传递给构造函数,然后构造函数在构造函数中成为this变量.
根据构造函数的编写方式,您可能必须这样做:
var instance = {};
var returned = MyClass.apply( instance, args);
if( returned != null) {
instance = returned;
}
Run Code Online (Sandbox Code Playgroud)
更新:评论说如果有原型,这不起作用.试试这个.
function newApply(class, args) {
function F() {
return class.apply(this, args);
}
F.prototype = class.prototype;
return new F();
}
newApply( MyClass, args);
Run Code Online (Sandbox Code Playgroud)