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对不起,我真的不知道你在说什么。。我的意思是,是的,我也这么认为,但我仍然必须修改这些调用的每一次出现,这是我在此试图避免的。谢谢,这是一个很好的解决方法,即使我必须手动设置每个函数的属性(但比更改所有调用更好),这肯定有点粗糙,但是,如果你不想在众多的电话中改变,那么它就达到了目的。但在以后的时间里,您将从重构所有代码以使用类中获益匪浅。