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

时间:2010-03-17 01:52:58

标签: javascript

javascript中的对象引发了我的循环!

在此设置中......

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

我如何让obj.foo.bar正确提醒someVar的值?

4 个答案:

答案 0 :(得分:1)

使用捕获的obj:

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

答案 1 :(得分:1)

alert(obj.someVar);

没有聪明的方法走上祖先的链条。如果您正在寻找某种类型的this.parent符号,对象不知道它们被包含在哪里。没有什么可以说对象甚至只有一个“父”。

foo.foo = new Object();
bar.bar = foo.foo;

bar.bar.parent == ???

答案 2 :(得分:1)

Javascript中的函数仅在应用.运算符的对象的上下文中调用。由于Javascript对象本身并不知道它们的父对象,因此无法向上走。

执行此操作的唯一方法是单独引用obj。 (作为bar的属性或单独的变量)

答案 3 :(得分:1)

这是我刚刚为向上遍历而制作的一般化模式。根据您的需求/假设,您可能会降低一些复杂性。

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"

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