Как расширить объектно-литеральные объекты для событий в NodeJS?

Я пытаюсь получить свой Node .jsобъект приведение событий. Теперь это не проблема, если я создаю «статические» объекты и создаю их экземпляры, но как мне это сделать, если у моего объекта нет статического дедушки, например, когда объект был создан с использованием нотации object literal?

Я привык писать синтаксис ExtJS, поэтому предпочитаю использовать объектный литерал.

// var EventEmitter = require('events').EventEmitter; // How where when?

myObject = {
  myFunction: function() {
    console.log('foo');
  },
  urFunction: function() {
    console.log('bar');
  }
};

Это объект. У него нет конструктора, потому что не нужно больше экземпляров.

Как теперь разрешить myObjectгенерировать события?

Я пытался и пытался адаптировать код, но я не могу заставить его работать без перезаписи моего объекта в форму с помощью конструкторапримерно так:

var EventEmitter = require('events').EventEmitter;
var util = require('util');

function myClass() {
  EventEmitter.call(this);

  myFunction: function() {
    this.emit('foo');
  },
  urFunction: function() {
    this.emit('bar');
  }
};

myClass.prototype = Object.create(EventEmitter.prototype);
// or // util.inherits(myClass, EventEmitter);
var myObject = new myClass; // Shouldn't be necessary for my single-instance case

Или добавляя свои функции/прототипы к чему-то созданному примерно так:

var EventEmitter = require('events').EventEmitter;
var util = require('util');

var myObject = new EventEmitter();
// or // var myObject = Object.create(new EventEmitter); // Dunno difference
myObject.myFunction = function() {
    this.emit('foo');
  },
myObject.urFunction = function() {
    this.emit('bar');
  }
};

util.inherits(myObject, EventEmitter);

Как разрешить myObjectгенерировать события, сохраняя литеральное обозначение объекта? Так много запутанных способов сделать это, но ни одного в этих JSON-подобныхнотированных объектах.

9
задан Redsandro 31 May 2012 в 16:20
поделиться