Javascript 混合数据类型、函数和对象

Javascript 混合数据类型、函数和对象,javascript,node.js,Javascript,Node.js,当您使用require并加载模块时,您似乎能够创建具有属性的函数或可以作为函数调用的对象 console.log(require('events').EventEmitter); //{ [Function: EventEmitter] defaultMaxListeners: 10, listenerCount: [Function] } 我以前使用require模块做过这件事,所以我可以复制它。但我想手动创建更多。在这方面,我有一些问题: 是否可以手动复制此数据,在不需要的情况下进行h

当您使用
require
并加载模块时,您似乎能够创建具有属性的函数或可以作为函数调用的对象

 console.log(require('events').EventEmitter);
 //{ [Function: EventEmitter] defaultMaxListeners: 10, listenerCount: [Function] }
我以前使用
require
模块做过这件事,所以我可以复制它。但我想手动创建更多。在这方面,我有一些问题:

  • 是否可以手动复制此数据,在不需要
    的情况下进行harcoded
  • 是否可以创建任何类型的属性,如getter或setter
  • 当您使用构造函数时,是否可以创建这些“对象”之一
  • 提前谢谢

    *或者我记得,我的记忆力很差

    已编辑: 要明确的是:我不是在谈论原型。在我的示例中,您可以看到,例如,
    defaultMaxListeners
    不是来自prototype。代码:

     EventEmitter.defaultMaxListeners // 10
     EventEmitter.prototype.defaultMaxListeners // undefined
     EventEmitter() //No error
    
  • 是否可以在不需要的情况下手动复制?是
  • 可以创建任何类型的属性,如getter或setter吗?是
  • 当您使用构造函数时,是否可以创建这些“对象”之一
  • 在JS中,函数也是对象。可以像其他任何对象一样将特性附着到它们。此外,在JS中,函数既可以用作函数,也可以用作对象构造函数

    下面的示例显示了可以对函数执行的操作。我使用的是经典的OOP术语,因为我不知道它们在JS中叫什么

    function SomeConstructor(){
      this.instanceProperty = 'foo';
    }
    
    // Instance Method
    SomeConstructor.prototype.method = function(){
      console.log('method');
    }
    
    // Static Method
    SomeConstructor.staticMethod = function(){
      console.log('static');
    }
    
    var test = new SomeConstructor();
    test.method();
    SomeConstructor.staticMethod();
    

    谢谢我从未读过这方面的书。这是一个有点模糊的Javascript部分。@b在现实世界中,一个很好的例子是jQuery,在jQuery中,您可以像调用函数一样调用
    $
    (选择器)
    ,但也可以像使用命名空间一样使用它,如
    $.ajax()