gpt4 book ai didi

javascript - 如何为 NodeJS 中的事件扩展对象文字对象?

转载 作者:IT老高 更新时间:2023-10-28 23:24:03 26 4
gpt4 key购买 nike

我正在尝试让我的 Node.js 对象 cast events。现在,如果我制作“静态”对象并实例化它们,这不是问题,但是当我的对象没有静态爷爷时,我该怎么做,比如使用 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

或者将我的函数/原型(prototype)添加到构造的东西中,如下所示:

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-like 标记的对象中却没有一种。

最佳答案

为什么不使用组合而不是继承?

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

关于javascript - 如何为 NodeJS 中的事件扩展对象文字对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10837203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com