混合数据types,函数和对象

当你使用require并加载一个模块时,你似乎可以创build一个带有属性或者可以作为函数调用的对象的函数。

  console.log(require('events').EventEmitter); //{ [Function: EventEmitter] defaultMaxListeners: 10, listenerCount: [Function] } 

我以前做过这个*使用require模块,所以我可以复制它。 但我想创造更多的手动。 我在这方面有一些问题:

  1. 有可能手动复制这个,无require编码?
  2. 可以创build任何types的属性,如getters或setter?
  3. 当你使用一个构造函数时可以创build这些“对象”之一吗?

提前致谢。

*或者我记得,我有一个可怕的记忆

编辑 :要清楚:我不是在谈论prototype 。 在我的例子中,你可以看到,例如, defaultMaxListeners不来自原型。 在代码中:

  EventEmitter.defaultMaxListeners // 10 EventEmitter.prototype.defaultMaxListeners // undefined EventEmitter() //No error 

  1. 有可能手动复制这个,无需要编码? 是
  2. 可能创build任何types的属性,如getters或setter? 是
  3. 当你使用构造函数时可以创build这些“对象”之一吗?

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