JavaScript回调或观察者
这是一个关于javascript的一般性问题。我想实现的目标是,但我不知道是否可能实现以下目标 我想编写一个包含对象的javascript库。因此,通过使用此javascript库,我希望通过以下操作从另一个javascript文件实例化该对象:JavaScript回调或观察者,javascript,callback,Javascript,Callback,这是一个关于javascript的一般性问题。我想实现的目标是,但我不知道是否可能实现以下目标 我想编写一个包含对象的javascript库。因此,通过使用此javascript库,我希望通过以下操作从另一个javascript文件实例化该对象: myObject = new myObject(); 我通过在javascript库中编写函数实现了这一点: function myObject() { //init object logic } 问题是,现在我希望能够从我之前实例化该对象
myObject = new myObject();
我通过在javascript库中编写函数实现了这一点:
function myObject() {
//init object logic
}
问题是,现在我希望能够从我之前实例化该对象的javascript文件中侦听该对象的不同事件。比如:
myObject = new myObject();
myObject.on('connection', function(conn) {
conn.on('data', function(data){
console.log("conn on data");
});
conn.on('error', function(data){
console.log("conn on error");
});
});
如何在javascript中实现这一点?我正在考虑回调,但我想不出方法。您正在寻找一个
EventEmitter
,可以通过以下方式实现:
类事件发射器{
构造函数(){
this.events={};
}
on(频道,cb){
if(Array.isArray(this.events[channel])){
this.events[channel].push(cb);
}否则{
此.events[channel]=[cb];
}
}
发射(通道,…参数){
if(Array.isArray(this.events[channel])){
this.events[channel].forEach(cb=>cb.apply(null,args));
}
}
}
您的类可以从EventEmitter
继承:
class MyClass扩展了EventEmitter{
构造函数(){
超级();
//初始化
}
}
现在,您可以实例化您的类:
var myObject=new MyClass();
myObject.on('事件',函数(a,b){
log('发出事件A:',A+b);
});
myObject.emit('event',123456);//“已发出事件A:579”
工作示例:
类事件发射器{
构造函数(){
this.events={};
}
on(频道,cb){
if(Array.isArray(this.events[channel])){
this.events[channel].push(cb);
}否则{
此.events[channel]=[cb];
}
}
发射(通道,…参数){
if(Array.isArray(this.events[channel])){
this.events[channel].forEach(cb=>cb.apply(null,args));
}
}
}
类MyClass扩展了EventEmitter{
构造函数(){
超级();
//初始化
}
}
var myObject=new MyClass();
myObject.on('事件',函数(a,b){
log('发出事件A:',A+b);
});
myObject.emit('event',123456);//“事件A已发出:579”
您正在寻找一个EventEmitter
,可以通过以下方式实现:
类事件发射器{
构造函数(){
this.events={};
}
on(频道,cb){
if(Array.isArray(this.events[channel])){
this.events[channel].push(cb);
}否则{
此.events[channel]=[cb];
}
}
发射(通道,…参数){
if(Array.isArray(this.events[channel])){
this.events[channel].forEach(cb=>cb.apply(null,args));
}
}
}
您的类可以从EventEmitter
继承:
class MyClass扩展了EventEmitter{
构造函数(){
超级();
//初始化
}
}
现在,您可以实例化您的类:
var myObject=new MyClass();
myObject.on('事件',函数(a,b){
log('发出事件A:',A+b);
});
myObject.emit('event',123456);//“已发出事件A:579”
工作示例:
类事件发射器{
构造函数(){
this.events={};
}
on(频道,cb){
if(Array.isArray(this.events[channel])){
this.events[channel].push(cb);
}否则{
此.events[channel]=[cb];
}
}
发射(通道,…参数){
if(Array.isArray(this.events[channel])){
this.events[channel].forEach(cb=>cb.apply(null,args));
}
}
}
类MyClass扩展了EventEmitter{
构造函数(){
超级();
//初始化
}
}
var myObject=new MyClass();
myObject.on('事件',函数(a,b){
log('发出事件A:',A+b);
});
myObject.emit('event',123456);//“发出事件A:579”
//库
function myObject() {
//init object logic
}
myObject.prototype.attach=function(eventType,callBack){
//default event
document.addEventListener(eventType,callBack);
......
//custom event code
var event = new Event('connection');
// Listen for the event.
document.addEventListener('connection', function (e) { ... }, false);
}
//用户文件
myObject = new myObject();
myObject.attach("click",clikeMe);
function clickMe(eventObject){
.......
......
}
//发送自定义事件的步骤
document.dispatchEvent(event)
//图书馆
function myObject() {
//init object logic
}
myObject.prototype.attach=function(eventType,callBack){
//default event
document.addEventListener(eventType,callBack);
......
//custom event code
var event = new Event('connection');
// Listen for the event.
document.addEventListener('connection', function (e) { ... }, false);
}
//用户文件
myObject = new myObject();
myObject.attach("click",clikeMe);
function clickMe(eventObject){
.......
......
}
//发送自定义事件的步骤
document.dispatchEvent(event)
您如何调度事件?@PeterMader我刚刚概述了如何为默认事件添加事件侦听器,我们可以使用自定义创建事件代码添加用户定义的事件,这些事件位于附加函数中。您还可以提供如何使用您的方法调度事件。另外,您不知道OP是否使用客户端JavaScript或
文档
不可用的环境。您如何调度事件?@PeterMader我刚才概述了如何为默认事件添加事件侦听器,我们可以使用自定义创建事件代码添加用户定义的事件,这些事件位于attach functionStill中,您可以提供如何使用您的方法分派事件。此外,您还不知道OP是否使用客户端JavaScript或document
不可用的环境。