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);