Искам да делегирам няколко метода от един 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
параметри? Възможно ли е да промените кода, за да има произволен брой параметри? Това работи ли в някой браузър?
Поздрави, Райнер