Я хочу делегировать несколько методов из одного JavaScript-объекта в другой. Поэтому я подумал об использовании метапрограммирования, чтобы несколько методов не определялись просто как делегаты. Пока я остановился на этом методе:
function delegate_to(_method, _obj) {
return function(_args) { // One parameter, what's about multiple parameters?
return _obj[_method](_args)
}
}
Итак, в качестве примера кода, как это должно работать:
var that = {}
var delegate = {}
that.foo = function(_message) { console.log("foo: " + _message) }
that.bar = function(_message) { console.log("bar: " + _message) }
that.baz = function(_message) { console.log("baz: " + _message) }
function delegate_to(_method, _obj) {
return function(_args) { // One parameter, what's about multiple parameters?
return _obj[_method](_args)
}
}
['foo', 'bar', 'baz'].forEach(function(method) {
delegate[method] = delegate_to(method, that)
})
delegate.foo('Hello JS') // foo: Hello JS
delegate.bar('Hello JS') // bar: Hello JS
delegate.baz('Hello JS') // baz: Hello JS
Код работает, но что, если я хочу делегировать метод, который имеет более одного параметра? Как насчет n
параметров? Можно ли изменить код, чтобы иметь любое количество параметров? Это работает в любом браузере?
С уважением, Райнер