javascript:从结构中的函数范围访问结构中的父对象

时间:2017-10-19 10:58:28

标签: javascript function scope structure access

告诉我如何从函数的范围(在结构中)访问其父元素(在结构中)?

例如:

var mystruct = {
    element1: 10,
    element2: 'test',
    element3: {
        sub1: 'data',
        sub2: function(){
            return this;
        }
    },
};

var res = mystruct.element3.sub2();

结果:

res = {sub1: 'data', sub2: f}

但是mystruct.element3.sub2函数如何访问元素mystruct.element1?

例如:

sub2: function(){
    return this.parent.element1;
}

结果:

res = 10

方法:

sub2: function(){
    return mystruct.element1.sub1;
}

不合适,因为在函数范围内我不知道mystruct

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您想要访问主对象。一种方法是定义元素3'作为一个函数,您可以创建一个用于访问“mystruct”的闭包。类似的东西:

var mystruct = {
    element1: 10,
    element2: 'test',
    element3: function () {
        var parent = this;
        return {
            sub1: 'data',
            sub2: function(){
                return parent.element1;
            }
        }
    },
};

您可以使用哪种方式:

mystruct.element3().sub2()

给出:

10

答案 1 :(得分:1)

您可以使用立即调用的函数表达式(IIFE)来创建element3,这样您就可以将父对象保存在变量中,然后相应地使用它。

var mystruct = {
    element1: 10,
    element2: 'test',
    element3: (function () {
        // save the reference you want to access later
        var parent = this;
        // create and return the object that you want to assign to 'element3'
        return {
            sub1: 'data',
            sub2: function() {
                // use the saved reference
                return parent.element1;
            }
        }
    })()  // NOTE: immediately invoke the function to return the correct object
};

然后你可以按照自己的意愿使用它:

mystruct.element3.sub2();  // will return 10

或者您可以使用它的变量名称:

sub2: function () {
    return mystruct.element1;
}