混合数据类型,函数和对象

时间:2013-12-31 13:27:03

标签: javascript node.js

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

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

我之前使用require模块完成了这项工作,因此我可以复制它。但我想手动创建更多。我在这方面有一些问题:

  1. 是否可以手动复制,不使用require进行编码?
  2. 是否可以创建任何类型的属性,如getter或setter?
  3. 可以创建其中一个'对象'当你使用构造函数?
  4. 提前致谢。

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

    被修改: 要明确:我不是在谈论prototype。在我的例子中,你可以看到,例如,defaultMaxListeners不是来自原型。在代码中:

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

1 个答案:

答案 0 :(得分:2)

  
      
  1. 是否可以手动复制,无需编码?是
  2.   
  3. 可以创建任何类型的属性,如getter或setter?是
  4.   
  5. 在使用构造函数时可以创建其中一个“对象”吗?
  6.   

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