Javascript 获取函数内部的祖父母上下文

Javascript 获取函数内部的祖父母上下文,javascript,Javascript,有人知道一种更优雅的方式来访问函数中父对象的父对象吗 var obj = { subobj : { func1 : function() { // here 'this' will refer to window // i want to access obj instead } } }; var obj = { func1 : function() { // i know

有人知道一种更优雅的方式来访问函数中父对象的父对象吗

var obj = {
    subobj : {
        func1 : function() {
            // here 'this' will refer to window
            // i want to access obj instead
        }
    }
};

var obj = {
    func1 : function() {
        //  i know 'this' here will refer to bj
    }
}
我也试过了

var obj = {
    subobj : {
        func1 : function() {
            // even 'this' will refer to window
        }.bind(this)
    }
}
但即使在这个绑定示例中,“this”也会指窗口,因为它在外部

我能行

var _this = obj;
在func1内部,但我不想使用这个丑陋的把戏

我基本上希望在func1中获取obj上下文,或者将obj上下文添加到subbj。 我现在想不出什么,你们有什么建议吗


首先谢谢你。您实际上不需要处理上下文,因为您已经可以从函数
func1
中访问
obj

var obj = {
    subobj : {
        func1 : function() {
            //use `obj` here
            console.log(obj);
        }
    }
};
或者,如果您出于某种原因希望像这样访问obj。执行以下操作

var obj = {
    subobj : {
        func1 : function() {
            //this is now obj here. Go suffer maintainer!
        }.bind(obj);
    }
};

首先。您实际上不需要处理上下文,因为您已经可以从函数
func1
中访问
obj

var obj = {
    subobj : {
        func1 : function() {
            //use `obj` here
            console.log(obj);
        }
    }
};
或者,如果您出于某种原因希望像这样访问obj。执行以下操作

var obj = {
    subobj : {
        func1 : function() {
            //this is now obj here. Go suffer maintainer!
        }.bind(obj);
    }
};

您可以在函数
func1
中访问
obj
。它已经在闭包内捕获。你为什么要搞乱上下文?只需使用
function(){console.log(obj);}
是的,我提到过直接obj访问,但如果我将来将obj更改为obj2,我将必须检查它在自身内部使用的位置,并在那里进行更改。“…但如果我将来将obj更改为obj2,我将必须检查它在自身内部使用的位置,并在那里进行更改。”这就是为什么要使用支持重构的IDE来重命名变量!那么您想将
subobj
移动到另一个obj,并使您的函数自动使用新的根作为上下文?如果未来的维护者不知怎么知道你住在哪里呢?:)我通常会对我的工作进行注释,这样就不会成为将来维护的问题,但我同意您的观点,即在变量中保存obj更具声明性。您可以在函数
func1
中访问
obj
。它已经在闭包内捕获。你为什么要搞乱上下文?只需使用
function(){console.log(obj);}
是的,我提到过直接obj访问,但如果我将来将obj更改为obj2,我将必须检查它在自身内部使用的位置,并在那里进行更改。“…但如果我将来将obj更改为obj2,我将必须检查它在自身内部使用的位置,并在那里进行更改。”这就是为什么要使用支持重构的IDE来重命名变量!那么您想将
subobj
移动到另一个obj,并使您的函数自动使用新的根作为上下文?如果未来的维护者不知怎么知道你住在哪里呢?:)我通常会对我的工作进行评论,这样就不会成为未来维护的问题,但我确实同意您的观点,即在变量中保存obj更具声明性。我正在尝试构建松散耦合的模块。访问模块(在本例中为“obj”)是我所需要的,从那里我可以去任何地方,访问模块内的任何内容。反正是Thnx!我正在尝试构建松散耦合的模块。访问模块(在本例中为“obj”)是我所需要的,从那里我可以去任何地方,访问模块内的任何内容。反正是Thnx!