javascript-如何访问调用方函数上下文对象
我有以下情况:javascript-如何访问调用方函数上下文对象,javascript,jquery,Javascript,Jquery,我有以下情况: 带有commons方法的主脚本 其他几个正在使用它们的脚本 (函数(){ window.main方法=函数(参数){ //... //log(“我正在从上下文调用此方法”+myContext.name);[无法执行] log(arguments.callee.caller.name); } })(); //对象A (功能(){ var myContext={}; myContext.name=“上下文A”; myContext.fn=函数fnA(){ 主要方法(“参数A1”
- 带有commons方法的主脚本
- 其他几个正在使用它们的脚本
(函数(){
window.main方法=函数(参数){
//...
//log(“我正在从上下文调用此方法”+myContext.name);[无法执行]
log(arguments.callee.caller.name);
}
})();
//对象A
(功能(){
var myContext={};
myContext.name=“上下文A”;
myContext.fn=函数fnA(){
主要方法(“参数A1”);
// ...
主要方法(“参数A2”);
// ...
主要方法(“参数A3”);
//等等。。。
}();
})();
//对象B
(功能(){
var myContext={};
myContext.name=“上下文B”;
myContext.fn=函数fnB(){
主要方法(“参数B1”);
// ...
主要方法(“参数B2”);
// ...
主要方法(“参数B3”);
//等等。。。
}();
})();代码>
我认为最接近的方法是使用call
(函数(){
window.main方法=函数(参数){
//...
//log(“我正在从上下文调用此方法”+myContext.name);[无法执行]
log(this.name,arguments.callee.caller.name,param);
}
})();
//对象A
(功能(){
var myContext={};
myContext.name=“上下文A”;
myContext.fn=函数fnA(){
调用(myContext,“参数A1”);
// ...
调用(myContext,“param A2”);
// ...
调用(myContext,“参数A3”);
//等等。。。
}();
})();
//对象B
(功能(){
var myContext={};
myContext.name=“上下文B”;
myContext.fn=函数fnB(){
调用(myContext,“参数B1”);
// ...
调用(myContext,“参数B2”);
// ...
调用(myContext,“param B3”);
//等等。。。
}();
})();代码>
如果您不想更改对main方法的数千个调用,则需要更改调用它的函数(fn
)。解决方案是将fn
保留为一个函数,而不是当前函数的结果,然后将上下文添加到该函数中,以后可以从main方法中调用该函数:
(function() {
window.mainMethod = function() {
// will print the context that has been added to the function object
console.log(arguments.callee.caller.context);
}
})();
// Object A
(function() {
var myContext = { name: 'A' };
myContext.fn = function fnA() {
window.mainMethod();
// notice that I removed the `()` to keep `fn` as a function inside `myContext`
};
// now add the context inside the function object
myContext.fn.context = myContext;
// then just call it
myContext.fn();
})();
根据你的理解,你不能通过这种方式访问调用方上下文。可能重复@freedomn-m这不是问题所在here@GhassenLouhaichi对不起,我真的不知道你在说什么。。我的意思是,是的,我也这么认为,但我仍然必须修改这些调用的每一次出现,这是我在此试图避免的。谢谢,这是一个很好的解决方法,即使我必须手动设置每个函数的属性(但比更改所有调用更好),这肯定有点粗糙,但是,如果你不想在众多的电话中改变,那么它就达到了目的。但在以后的时间里,您将从重构所有代码以使用类中获益匪浅。