代码之家  ›  专栏  ›  技术社区  ›  bschaeffer

如何在javascript中从obj.foo.bar访问主obj?

  •  1
  • bschaeffer  · 技术社区  · 15 年前

    javascript中的对象将我抛出一个循环!

    在这个设置中…

    var obj = {
        someVar: "my awesome variable",
        foo: {
            bar: function(){
                alert(this.someVar);
            }
        }
    };
    

    如何让obj.foo.bar正确地提醒 someVar ?

    4 回复  |  直到 15 年前
        1
  •  1
  •   spender    15 年前

    使用捕获的对象:

    var obj = {
        someVar: "my awesome variable",
        foo: {
            bar: function(){
                alert(obj.someVar);
            }
        }
    };
    
        2
  •  1
  •   John Kugelman Michael Hodel    15 年前
    alert(obj.someVar);
    

    没有一个聪明的方法可以走上祖先的链条。如果要查找某种类型的 this.parent 符号类型。没有什么可以说一个对象甚至有一个“父对象”。

    foo.foo = new Object();
    bar.bar = foo.foo;
    
    bar.bar.parent == ???
    
        3
  •  1
  •   SLaks    15 年前

    javascript中的函数仅在 . 已将运算符应用于。由于javascript对象本质上不知道它们的父对象,因此不可能沿着链前进。

    唯一的方法是单独引用 obj .(作为 bar 或单独的变量)

        4
  •  1
  •   bcherry    15 年前

    这是我为向上遍历准备的一个通用模式。根据您的需求/假设,您可能会降低一些复杂性。

    var obj = (function (parent) {
        var obj = {
            foo: "foo",
            up: function () {
                return parent;
            }
        };
    
        obj.bar = (function (parent) {
            var obj = {             
                baz: function () {
                    alert(this.up().foo);
                },
                up: function () {
                    return parent;
                }
            };
    
            return obj;
        }(obj));
    
        return obj;
    }(window));
    
    obj.bar.baz(); // "foo"
    

    几乎可以肯定,这比它的价值更麻烦。