这是关于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中实现这一目标?我在考虑回调,但我无法弄明白。
答案 0 :(得分:3)
您正在寻找可以这样实现的public static Bitmap getBitmapFromString(String qrText) {
ByteArrayOutputStream out = QRCode.from(qrText).to(ImageType.PNG).withSize(300, 300).stream();
byte[] data = out.toByteArray();
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length, null);
return bmp;
}
:
EventEmitter
您的班级可以继承class EventEmitter {
constructor () {
this.events = {};
}
on (channel, cb) {
if (Array.isArray(this.events[channel])) {
this.events[channel].push(cb);
} else {
this.events[channel] = [cb];
}
}
emit (channel, ...args) {
if (Array.isArray(this.events[channel])) {
this.events[channel].forEach(cb => cb.apply(null, args));
}
}
}
:
EventEmitter
现在,您可以实例化您的课程:
class MyClass extends EventEmitter {
constructor () {
super();
// do initialization
}
}
工作示例:
var myObject = new MyClass();
myObject.on('event', function (a, b) {
console.log('Event A was emitted: ', a + b);
});
myObject.emit('event', 123, 456); // "Event A was emitted: 579"
请注意,我使用了一些新功能,例如扩展运算符(class EventEmitter {
constructor () {
this.events = {};
}
on (channel, cb) {
if (Array.isArray(this.events[channel])) {
this.events[channel].push(cb);
} else {
this.events[channel] = [cb];
}
}
emit (channel, ...args) {
if (Array.isArray(this.events[channel])) {
this.events[channel].forEach(cb => cb.apply(null, args));
}
}
}
class MyClass extends EventEmitter {
constructor () {
super();
// do initialization
}
}
var myObject = new MyClass();
myObject.on('event', function (a, b) {
console.log('Event A was emitted: ', a + b);
});
myObject.emit('event', 123, 456); // "Event A was emitted: 579"
)和新的...
语法。当然,您也可以使用旧的class
和function
方式实现相同的目标。
在您的代码中,您有
行prototype
不要那样做。您将新实例分配给包含构造函数的变量,从而失去对该构造函数的访问权。
NodeJS有自己的EventEmitter
类。您可以使用以下方式访问它:
myObject = new myObject();
答案 1 :(得分:1)
//文库
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);
}
// userfile的
myObject = new myObject();
myObject.attach("click",clikeMe);
function clickMe(eventObject){
.......
......
}
//发送自定义事件
document.dispatchEvent(event)