将回调函数传递给原型
Passing a callback function to a prototype
试验一个消息传递模块,该模块将提供在 Node 应用程序中的多个模块之间发出和侦听事件的方法。我的目标是初始化一个侦听器,并让它直接馈送到回调函数中。
在这一点上被语法和JS原型绊倒了。
var events = require('events');
var inter_com = new events.EventEmitter();
var com_bus = {
initListener:function(listener_name, callback){
this.listener_name = listener_name;
this.callback_function = callback;
inter_com.on(this.listener_name, this.callback_function);
},
sendMessage:function(data){
inter_com.emit(this.listener_name,data);
console.log('test event sent');
}
}
var instance_of_com = Object.create(com_bus);
instance_of_com.initListeners('testing',pipeMe);
instance_of_com.sendMessage('its good to be the king');
var pipeMe = function(data){console.log(data)};`
JavaScript 遵循原型继承,
1)要从对象继承,父级需要是一个函数.约定是函数应该命名为InitCap
,表示它是一个构造函数。
2)子继承原型,因此您需要从Function_Name.prototype
继承,而不是从Function_Name
继承。
var events = require('events');
var inter_com = new events.EventEmitter();
function Com_bus() {
}
Com_bus.prototype.initListeners = function(listener_name, callback) {
this.listener_name = listener_name;
this.callback_function = callback;
inter_com.on(this.listener_name, this.callback_function);
};
Com_bus.prototype.sendMessage = function(listener_name, callback) {
inter_com.emit(this.listener_name, data);
console.log('test event sent');
};
var pipeMe = function(data) {
console.log(data)
};
var instance_of_com = Object.create(Com_bus.prototype);
instance_of_com.initListeners('testing', pipeMe);
instance_of_com.sendMessage('its good to be the king');
解决此问题
的一种方法是创建一个返回com_bus实例的工厂:
function returnComBusInstance () {
// create a closure on these variables
var listener_name;
var callback_function;
return {
initListener:function(_listener_name, _callback){
listener_name = _listener_name;
callback_function = _callback;
inter_com.on(listener_name, callback_function);
},
sendMessage:function(data){
inter_com.emit(listener_name, data);
console.log('test event sent');
}
}
}
然后:
var com_bus_instance = returnComBusInstance()
我个人尽量避免使用this
但如果需要,那么您可以bind
、call
或apply
,或者再次创建一个工厂,但在this
的上下文中创建闭包
或者您可以将原型属性传递给Object.create
:
Object.create(com_bus, {
'listener_name': {value: null, enumerable:true},
'callback_function': {value:null, enumerable:true}
});
相关文章:
- 将对象传递给原型回调
- javascript原型-添加回调
- 原型回调函数替换'这'价值
- 为什么任何对象原型都不用作 forEach 回调
- 使用原型时是否可以直接将类方法作为回调传递
- 将回调函数与原型函数一起使用
- 将回调函数传递给原型
- 如何避免 jquery 与原型的回调函数中的 $ 冲突
- 来自 ajax 回调的 Javascript(原型)方法调用
- 从回调中调用原型方法
- Javascript-如何保存对“;这个“;用于使用原型模式在命名函数回调中进行访问
- 原型链回调
- 在javascript中使用promise和原型时,优雅的回调绑定
- node-js原型对象'self'var没有为回调存储正确的上下文
- 将函数作为回调传递时原型出现问题
- 当使用原型方法声明从回调访问对象时,如何访问对象的其他方法
- 如何将原型上定义的方法作为回调传递给Array.map
- 设置“this"到实例,在创建原型函数期间的回调集中
- 这有什么不对吗?尝试在原型中使用请求回调,但收效甚微
- jquery插件开发:原型回调参数