Итак, я получил два объекта, а и б. Теперь я хочу передать один из методов b объекту a, который должен его сохранить. Давайте назовем этот метод b.met:
b.met=function(){
alert(this.txt);
}
Теперь я хочу позвонить б.мету из а. Следующий код не работает, так как a.met является клоном b.met внутри области действия a:
a.met=b.met;
a.met(); //Executes in the 'a' scope!
К настоящему времени я нашел единственный способ сохранить имя метода в строке и использовать его в операторе eval:
a.toCall='b.met';
eval(a.toCall+'();');
Поскольку все говорят, что вам следует избегать использования eval ... какие еще есть возможности?
РЕДАКТИРОВАТЬ - см. В комментариях: поэтому я изменил свой код с:
a:{
processes:[],
spawnProcess:function(type,id,closeFn){
var closeFn=closeFn || 'function(){}';
this.processes.push({type:type,id:id,closeFn:closeFn});
}
до:
a:{
processes:[],
spawnProcess:function(type,id,closeFn){
var closeFn=function(){closeFn()} || 'function(){}';
this.processes.push({type:type,id:id,closeFn:function(){closeFn()}});
}
При выполнении следующего кода я получаю слишком много ошибок рекурсии:
a.spawnProcess('','',b.met);
a.processes[0].closeFn();