簡體   English   中英

如何創建其中對象本身是函數的對象?

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

我有一個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綁定,因為在大多數情況下,您需要做任何有趣的事情時都需要它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM