我希望这个问题有道理。我可以做以下事情:
function constructor_function() {...code...};
var a = new constructor_function();
a();
答案 0 :(得分:3)
如果构造函数返回一个对象,那么它将是new ..
表达式的值。函数是一个对象,所以你可以做你想做的事:
function ConstructorFunction() {
return function () { alert("A function!"); };
}
var a = new ConstructorFunction();
a();
答案 1 :(得分:1)
function Wrapper(constr, func) {
return function() {
var f = func();
constr.apply(f, arguments);
return f;
}
}
function ConstructorFunction() {
return function() {
console.log("A function");
}
}
function Constructor() {
this.foo = 42;
}
var MyFunction = Wrapper(Constructor, ConstructorFunction);
var o = MyFunction();
o(); // A function
console.log(o.foo); // 42
要同时操纵this
状态并且返回的对象是function
,如果没有很多额外的箍就很难完成。
这简直就是我能做到的。您有标准的构造函数,它将this
作为对象进行操作。然后你有你的ConstructorFunction,这是你想要构造函数返回的函数。这必须是每次调用时返回新函数的因素。
将两者结合在一起得到一个函数,该函数返回一个具有返回函数和状态操作的对象。
答案 2 :(得分:0)
您可以从构造函数返回一个函数,但它实际上并不是构造函数。您可以将该函数用作常规函数,不需要new
关键字:
function constructor_function() {
return function() { alert(42); }
};
var a = constructor_function();
a();
由于函数是一个对象,您甚至可以向其添加属性:
function constructor_function() {
var t = function() { alert(42); }
t.size = 1337;
return t;
};
var a = constructor_function();
a();
alert(a.size);