JavaScript回调或观察者

JavaScript回调或观察者,javascript,callback,Javascript,Callback,这是一个关于javascript的一般性问题。我想实现的目标是,但我不知道是否可能实现以下目标 我想编写一个包含对象的javascript库。因此,通过使用此javascript库,我希望通过以下操作从另一个javascript文件实例化该对象: myObject = new myObject(); 我通过在javascript库中编写函数实现了这一点: function myObject() { //init object logic } 问题是,现在我希望能够从我之前实例化该对象

这是一个关于javascript的一般性问题。我想实现的目标是,但我不知道是否可能实现以下目标

我想编写一个包含对象的javascript库。因此,通过使用此javascript库,我希望通过以下操作从另一个javascript文件实例化该对象:

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
不可用的环境。