如何创建一个对象本身就是一个函数的对象?

时间:2015-01-29 23:11:59

标签: javascript

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

var obj = new Obj();

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

obj();

Obj定义为:

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

我该怎么做?

3 个答案:

答案 0 :(得分:4)

让你调用的函数更容易返回一个被视为对象和函数的任意函数。每个都是唯一的,您不需要使用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

答案 1 :(得分:1)

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

function foo() {
    return "bar";
}

您可以在foo上设置属性。

foo.baz = 42;

现在,您可以致电foo并获取结果"bar",然后就可以访问其baz媒体资源。

答案 2 :(得分:0)

我认为你在这里寻找'封闭'。 尝试:

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来执行您的功能。

作为上面代码中的一个奖励,我还在'闭包'中添加了{{1}}绑定,因为在大多数情况下你需要它来做任何有趣的事情。