Мне нужно уметь выставлять методы одного объекта, вызываемые триггерами событий. Я также хочу автоматически зарегистрировать эти триггеры, предоставив список методов и их аргументы для данного объекта. Вот что у меня есть (jsfiddle here):Автоматически регистрировать триггерные обратные вызовы для выбранных методов в Javascript
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'
. Что я делаю не так?
Спасибо, это намного лучший способ. Я думал, что различие между данными и кодом размыто в этом случае в javascript, есть ли у вас информация о производительности вызовов 'Function'? – Dreen
http://javascriptweblog.wordpress.com/2010/04/19/how-evil-is-eval/ – jasssonpet