【发布时间】:2011-08-30 16:26:17
【问题描述】:
所以,我得到了两个对象,a 和 b。现在,我想将 b 的方法之一传递给 a 对象,它应该存储它。让我们将该方法称为 b.met:
b.met=function(){
alert(this.txt);
}
现在,我想从 a 调用 b.met。以下代码不起作用,因为 a.met 是 a 范围内 b.met 的克隆:
a.met=b.met;
a.met(); //Executes in the 'a' scope!
到目前为止,我发现的唯一方法是将方法的名称保存在字符串中并在 eval 语句中使用它:
a.toCall='b.met';
eval(a.toCall+'();');
既然每个人都说你应该避免使用 eval ......还有什么其他可能性?
编辑 - 在 cmets 中查看:所以我将代码更改为:
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();
【问题讨论】:
标签: javascript object methods reference eval