我试图了解JavaScript中继承的差异。
现在我正在尝试将第一个代码更改为工厂函数(第二个代码)。但是如何在里面使用EventEmitter的方法呢?
我已经和这段代码搏斗了大约5个小时,而且我已经阅读了我在这个主题上可以找到的所有博客。因此,我们将非常感谢一些指导。
原型授权方式
var inherits = require('util').inherits;
var EventEmitter = require('events').EventEmitter;
module.exports = Clock;
function Clock() {
if ( ! (this instanceof Clock)) return new Clock();
this._started = false;
EventEmitter.call(this);
}
inherits(Clock, EventEmitter);
Clock.prototype.start = function start() {
var self = this;
if (self._started) return;
var tic = true;
this._started = Date.now();
self._interval = setInterval(function() {
var event = tic ? 'tic' : 'toc';
self.emit(event, self.time());
tic = ! tic;
}, 1000);
};
Clock.prototype.stop = function stop() {
clearInterval(this._interval);
this._started = false;
};
Clock.prototype.time = function() {
return this._started && Date.now() - this._started;
};
连锁继承方式 - 工厂功能
var eventEmitter = require('events').EventEmitter;
const clock = () => {
let started = false;
let interval;
//eventEmitter.call(this);
self = {
isStarted: function() {
return started;
},
start: function() {
let tic = true;
if (started) return;
started = Date.now();
interval = setInterval(function() {
let event = tic ? 'tic' : 'toc';
this.emit(event);
})
},
}
return Object.assign({}, self, eventEmitter);
};
var clock1 = clock()
答案 0 :(得分:0)
我写了
const EventEmitter = require('events').EventEmitter;
function clock() {
let started = false;
let interval;
return Object.assign(new EventEmitter(), {
isStarted() {
return started;
},
start() {
…
}
});
}
var clock1 = clock();