如何创建一个对象,其中对象本身是一个函数

How to create an object in which the object itself is a function?

本文关键字:函数 一个 对象 何创建 创建 一个对象      更新时间:2023-09-26

我有一个从构造函数创建的javascript对象。

var obj = new Obj();

它有几个功能,但我也希望按如下方式使用它;

obj();

Obj 定义为:

function obj() {
   this.blah = function () {
   };
}

我该怎么做?

调用一个函数会更容易,该函数返回一个被视为对象和函数的任意函数。每个都是唯一的,您无需使用 new .

function Obj() {
 var ret = function(){
  console.log('Hello');
 };
 ret.blah = function () {
   console.log('World');
 };
 return ret;
}
var obj = Obj();
obj();//Hello
obj.blah();//World

可以在函数对象上创建属性。例如,如果您有函数

function foo() {
    return "bar";
}

您可以在 foo 上设置属性。

foo.baz = 42;

所以现在你可以调用foo并得到结果"bar",你可以访问它的baz属性。

我认为您在这里寻找"关闭"。尝试:

function MyObject(/* constructor params */) {
   //assign properties to 'this'
   return function() {
      return this;  //<== placeholder implementation
   }.bind(this);
}
var obj1 = new MyObject();

现在,如果您执行console.log(obj1)您将看到function() { [...] }并且您将能够执行obj1()来执行您的函数。

作为上面代码的奖励,我还在"闭包"中添加了this绑定,因为在大多数情况下,您正在做任何有趣的事情都需要它。