Javascript 使用构造函数创建的对象本身是否可以是函数?
我希望这个问题有意义。我能做如下事情吗:Javascript 使用构造函数创建的对象本身是否可以是函数?,javascript,Javascript,我希望这个问题有意义。我能做如下事情吗: function constructor_function() {...code...}; var a = new constructor_function(); a(); 如果构造函数返回一个对象,则该对象将是new..表达式的值。函数是一个对象,因此您可以执行以下操作: function ConstructorFunction() { return function () { alert("A function!"); }; } va
function constructor_function() {...code...};
var a = new constructor_function();
a();
如果构造函数返回一个对象,则该对象将是
new..
表达式的值。函数是一个对象,因此您可以执行以下操作:
function ConstructorFunction() {
return function () { alert("A function!"); };
}
var a = new ConstructorFunction();
a();
要按照预期操作此
状态,并将对象返回为函数
是很难做到的,因为要跳过很多额外的环
这是我能做到的最简单的事了。您有一个标准的构造函数,它将这个作为一个对象进行操作。然后您就有了构造函数function,它是您希望构造函数返回的函数。这必须是一个在每次调用新函数时返回新函数的因子
将两者包装在一起,得到一个函数,该函数返回一个对象,该对象既有返回的函数,又有对状态的操作
您可以从构造函数返回函数,但实际上它不是一个构造函数。您可以将该函数用作常规函数,不需要使用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);
它只返回一个函数,不处理新状态。调用new
没有意义。这是不必要的低效。嗯,谢谢!你知道为什么下面触发的警报会显示“[对象]”而不是“字符串!”?code=函数test(){返回“字符串!”};var a=新测试();警报(a)@zjmiller,因为您需要返回带有new
关键字的对象。如果不返回对象,则返回值是在函数测试中创建和使用的对象this
。要覆盖此
的默认返回值,您需要返回一个对象(函数是对象,字符串是字符串)
function constructor_function() {
var t = function() { alert(42); }
t.size = 1337;
return t;
};
var a = constructor_function();
a();
alert(a.size);