在Javascript中为所选方法自动注册触发器回调
Automatically register trigger callbacks for selected methods in Javascript
我需要能够公开一个对象的方法,以便由事件触发器调用。我还想通过为给定对象提供方法及其参数的列表来自动注册这些触发器。这是我所拥有的(这里是jsfiddle(:
function A() {
}
A.prototype = {
register: function(cbname, cbargs, context) {
args = ['context'].concat(cbargs);
var callback = new Function(args, "context." + cbname + "(" + cbargs.toString() + ");");
$(document).bind(cbname, callback);
document.write(callback.toString() + "<br />");
}
};
function B() {
}
B.prototype = {
add: function(l, r) {
document.write(l + r);
}
};
$(function() {
var a = new A();
var b = new B();
a.register('add', ['l', 'r'], b);
$(document).trigger('add', [b, 1, 2]);
});
创建的回调似乎有正确的代码:function anonymous(context,l,r) { context.add(l,r); }
,但当运行时,我在控制台中收到错误消息,说Uncaught TypeError: Object #<Object> has no method 'add'
。我做错了什么?
var callback = new Function(args, "context." + cbname + "(" + cbargs.toString() + ");");
使用Function构造函数创建的函数不会为其创建上下文创建闭包;它们总是在窗口上下文中运行。这是eval的一种形式,所以最好不惜一切代价避免。
function A() {}
A.prototype = {
register: function (name, context) {
var callback = function () {
var args = Array.prototype.slice.call(arguments);
args.shift();
context[name].apply(context, args);
};
$(document).bind(name, callback);
}
};
function B() {}
B.prototype = {
add: function (l, r) {
console.log(l + r);
}
};
var a = new A(),
b = new B();
a.register('add', b);
$(document).trigger('add', [2, 3]); // 5
我认为触发事件的第一个参数是事件本身。
因此,我认为您需要更改寄存器函数中的行,如下所示:
args = ['evt', 'context'].concat(cbargs);
(jsFiddle:http://jsfiddle.net/hVGcE/3/)
相关文章:
- 悬停功能触发器
- 点击facebook像素跟踪注册(JS/JQUERY代码)
- jQuery触发器点击未从AJAX成功工作
- 当组件准备就绪时,如何在Polymer中动态注册新属性
- 注册OpenLayers事件时,即使使用匿名函数或绑定,JavaScript关闭也会触发循环内的所有内容
- 为什么会返回触发器('点击')
- 有没有一种方法可以检测ios<>使用jquery和触发器操作形成导航按钮
- 如何在单击“提交”按钮时为“新建”窗口编写JavaScript,用“确定”和“取消”显示注册信息
- Angularamd在typescript控制器注册中
- 注册组件的非角度和角度版本
- jQuery自动完成触发器在选择时返回
- 如何从已注册的事件发送 JavaScript 对象
- 不使用Grunt.initConfig()注册Grunt任务
- 用键盘分页jQuery下一个和上一个控件.触发器('点击')不'不起作用
- Meteor出版物'是这样的吗;t触发器
- JS触发器值检查在文档加载后添加到页面的元素在加载时更改AND
- 使用谷歌图表将mousedown事件注册为click
- 在Javascript中为所选方法自动注册触发器回调
- 触发器 JavaScript 事件处理程序已在插件上注册
- addEventListener注册的jQuery触发器mousedown